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

PHPMailer 發送郵件完整配置指南(含 SMTP、附件、HTML 郵件)

     編輯:PHP 相關知識

PHP 內置 mail() 函數功能有限:僅支持純文本、依賴本地 MTA(Windows 環境常失效)、無身份驗證導致進垃圾箱。PHPMailer 是功能強大的郵件發送庫,支持 SMTP 認證、HTML 郵件、附件、嵌入圖片、多收件人等,是現代 PHP 項目的標準選擇。

核心功能特性

  • 支持 SMTP 認證(SSL/TLS),兼容 Gmail、Outlook、企業郵箱等
  • 發送 HTML 郵件,自動生成純文本替代內容
  • 支持多附件、嵌入圖片(CID 方式)
  • 多收件人(TO/CC/BCC)、回覆地址、自定義郵件頭
  • 完善的調試輸出、錯誤處理、多種編碼支持

基礎使用範例(以 Gmail SMTP 為例)

require_once 'vendor/autoload.php'; // Composer 安裝推薦
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // SMTP 服務器配置
    $mail->isSMTP();
    $mail->Host       = 'smtp.gmail.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'your_email@gmail.com';
    $mail->Password   = 'your_app_password'; // 應用專用密碼,非登錄密碼
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL
    $mail->Port       = 465;
    $mail->CharSet    = 'UTF-8';

    // 發件人/收件人
    $mail->setFrom('sender@example.com', '發件人名稱');
    $mail->addAddress('recipient@example.com', '收件人名稱');
    $mail->addReplyTo('reply@example.com', '回覆地址');
    // $mail->addCC('cc@example.com');
    // $mail->addBCC('bcc@example.com');

    // 附件(可選)
    // $mail->addAttachment('/path/to/file.pdf', 'custom_name.pdf');
    // $mail->addEmbeddedImage('/path/to/logo.png', 'logo_cid'); // HTML 中用 <img src="cid:logo_cid">

    // 郵件內容
    $mail->isHTML(true);
    $mail->Subject = 'PHPMailer 測試郵件';
    $mail->Body    = '

你好!

這是一封 HTML 郵件。

'; $mail->AltBody = '你好!這是純文本備選內容。'; $mail->send(); echo '郵件發送成功!'; } catch (Exception $e) { echo "發送失敗:{$mail->ErrorInfo}"; }

關鍵配置詳解

屬性/方法說明
isSMTP()啟用 SMTP 模式(非本地 mail())
SMTPAuth = true啟用 SMTP 認證
SMTPSecurePHPMailer::ENCRYPTION_SMTPS (SSL, 465) 或 PHPMailer::ENCRYPTION_STARTTLS (TLS, 587)
CharSet = 'UTF-8'必須設置,否則中文亂碼
isHTML(true)啟用 HTML 格式
AltBody非 HTML 客戶端的備選純文本內容
addAttachment()添加附件,第二參數可自定義文件名
addEmbeddedImage()嵌入圖片,HTML 中引用 cid:標識符

常見問題排查

  • 連接超時:檢查防火牆/安全組是否放行 465/587 端口;嘗試 telnet smtp.gmail.com 465。
  • 認證失敗:Gmail 需開啟「兩步驗證」並生成「應用專用密碼」;企業郵箱確認 SMTP 服務已開啟。
  • 進垃圾箱:配置 SPF/DKIM/DMARC 域名解析;避免標題/內容包含敏感詞;使用專用發信域名/IP。
  • 中文亂碼:確保 CharSet = 'UTF-8' 且文件編碼為 UTF-8 無 BOM。

進階用法提示

  • 批量發送:循環調用 addAddress() 並 send(),每次發送後 clearAddresses();或使用郵件隊列(如 Laravel Queue + PHPMailer)。
  • 異步發送:將郵件任務推入 Redis/RabbitMQ,由 Worker 進程消費發送,避免阻塞用戶請求。
  • 模板引擎:結合 Twig/Blade 渲染 HTML 內容,再傳給 Body。

PHPMailer 官方文檔:GitHub Repository,建議通過 Composer 安裝:composer require phpmailer/phpmailer。

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