首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHPMailer 發送郵件完整教學:以 QQ 郵箱 SMTP 為例

     編輯:PHP 相關知識

PHPMailer 發送郵件完整教學:以 QQ 郵箱 SMTP 為例

PHPMailer 是 PHP 最流行的郵件發送庫,支援 SMTP 認證、HTML 郵件、附件、嵌入圖片等功能。本文提供完整可執行範例,以 QQ 郵箱 SMTP 為例,涵蓋佈署步驟、關鍵設定說明、常見錯誤排查,助您快速整合郵件發送功能。

前置準備

  1. 下載 PHPMailer:composer require phpmailer/phpmailer 或官網下載 PHPMailerAutoload.php、class.phpmailer.php、class.smtp.php。
  2. QQ 郵箱開啟 SMTP 服務:設定 → 帳戶 → 開啟「POP3/SMTP 服務」→ 取得授權碼(非登入密碼)。

完整發送腳本 (index.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)
PortSMTP 埠口587 (TLS)、465 (SSL)、25 (無加密,不建議)
SMTPDebug除錯等級0=關閉、1=客戶端訊息、2=客戶端+伺服器訊息
CharSet郵件編碼$mail->CharSet = 'UTF-8';(預設即為 UTF-8)

常見錯誤與解決方案

  1. SMTP Error: Could not authenticate
    • 檢查「授權碼」是否正確(非登入密碼)。
    • 確認 QQ 郵箱「安全中心」無異地登入限制。
    • 伺服器防火牆/安全組需放行 587/465 埠出站。
  2. SMTP connect() failed
    • 開啟 SMTPDebug = 2 觀察詳細交互日誌。
    • 檢查 openssl 擴充套件已啟用(php -m | grep openssl)。
    • 嘗試 $mail->SMTPOptions = ['ssl' => ['verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true]];(僅測試環境)。
  3. 郵件進垃圾桶
    • 設定 SPF/DKIM/DMARC 域名解析記錄。
    • 避免標題/內容含敏感詞、過多連結、全大寫。
    • 使用企業郵箱或信譽良好的第三方發信服務(SendGrid、Mailgun、Amazon SES)。

進階應用提示

  • 批量發送:循環 addAddress() → send() → clearAddresses(),或使用郵件佇列(Redis + 背景 Worker)異步發送。
  • 模板引擎:搭配 Twig/Blade 渲染 HTML 內容,分離程式邏輯與視圖。
  • 事件追蹤:整合 Webhook 接收退信、開啟、點擊回調(需郵件服務商支援)。

PHPMailer 功能強大且社群活躍,掌握上述核心用法即可滿足絕大多數專案的郵件發送需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved