PHPMailer 是 PHP 最流行的郵件發送庫,支援 SMTP 認證、HTML 郵件、附件、嵌入圖片等功能。本文提供完整可執行範例,以 QQ 郵箱 SMTP 為例,涵蓋佈署步驟、關鍵設定說明、常見錯誤排查,助您快速整合郵件發送功能。
composer require phpmailer/phpmailer 或官網下載 PHPMailerAutoload.php、class.phpmailer.php、class.smtp.php。<?php
// 1. 設定時區(SMTP 需精確時間)
date_default_timezone_set('Etc/UTC');
// 2. 載入 PHPMailer
require __DIR__ . '/vendor/autoload.php'; // Composer 方式
// require './PHPMailerAutoload.php'; // 手動下載方式
// 3. 實例化並設定 SMTP
$mail = new PHPMailer\PHPMailer\PHPMailer(true); // true = 啟用例外拋出
try {
// SMTP 基礎設定
$mail->isSMTP();
$mail->Host = 'smtp.qq.com';
$mail->SMTPAuth = true;
$mail->Username = 'your_qq@qq.com'; // 發件信箱
$mail->Password = 'your_auth_code'; // 授權碼
$mail->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS; // TLS 加密
$mail->Port = 587; // TLS 埠口(SSL 用 465)
// 除錯模式(開發時建議開啟 2,上線設 0)
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
// 寄件人/收件人
$mail->setFrom('your_qq@qq.com', '系統通知');
$mail->addReplyTo('your_qq@qq.com', '系統通知');
$mail->addAddress('recipient@example.com', '收件人姓名');
// 郵件內容
$mail->isHTML(true);
$mail->Subject = 'PHPMailer SMTP 測試郵件';
$mail->Body = '<h3>這是一封 <b>HTML</b> 格式測試郵件</h3><p>發送時間:' . date('Y-m-d H:i:s') . '</p>';
$mail->AltBody = '這是純文字備用內容,給不支援 HTML 的郵件客戶端顯示。';
// 附件(可選)
// $mail->addAttachment('/path/to/file.pdf', '新檔名.pdf');
// 發送
$mail->send();
echo '郵件發送成功!';
} catch (Exception $e) {
echo "郵件發送失敗: {$mail->ErrorInfo}";
}
?>
| 參數 | 說明 | 常見值 |
|---|---|---|
SMTPSecure | 加密方式 | ENCRYPTION_STARTTLS (587)、ENCRYPTION_SMTPS (465) |
Port | SMTP 埠口 | 587 (TLS)、465 (SSL)、25 (無加密,不建議) |
SMTPDebug | 除錯等級 | 0=關閉、1=客戶端訊息、2=客戶端+伺服器訊息 |
CharSet | 郵件編碼 | $mail->CharSet = 'UTF-8';(預設即為 UTF-8) |
SMTPDebug = 2 觀察詳細交互日誌。openssl 擴充套件已啟用(php -m | grep openssl)。$mail->SMTPOptions = ['ssl' => ['verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true]];(僅測試環境)。addAddress() → send() → clearAddresses(),或使用郵件佇列(Redis + 背景 Worker)異步發送。PHPMailer 功能強大且社群活躍,掌握上述核心用法即可滿足絕大多數專案的郵件發送需求。