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

PHPMailer 核心功能與 Gmail SMTP 實戰教學

     編輯:PHP 相關知識

PHPMailer 是 PHP 最流行的郵件發送庫,支援 SMTP 驗證、SSL/TLS 加密、HTML/純文字郵件、附件、內嵌圖片、多收件人等企業級功能。本文整理其核心特色,並以 Gmail SMTP 為例示範完整發送流程。

核心功能一覽

  • ✅ SMTP 驗證與多種加密協定(SSL / TLS / STARTTLS)
  • ✅ 多收件人(TO / CC / BCC / Reply-To)
  • ✅ HTML 與純文字替代內容
  • ✅ 內嵌圖片(CID)與多附件
  • ✅ 自訂 Header、郵件優先順序、編碼(Base64 / Quoted-Printable / 8bit)
  • ✅ 強大除錯模式(SMTPDebug = 1/2/3/4)
  • ✅ 支援 Sendmail、qmail、Postfix、Exchange 等多種後端
  • ✅ 輕量、無相依、相容 PHP 5.5+ / 7.x / 8.x

安裝方式

推薦使用 Composer:

composer require phpmailer/phpmailer

或手動下載 PHPMailer.php、SMTP.php、Exception.php 三個檔案置入專案。

Gmail SMTP 完整發送範例

<?php
require_once __DIR__ . '/vendor/autoload.php'; // Composer
// require_once 'PHPMailer.php'; // 手動引入

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

function sendMail($to, $subject, $body) {
    $mail = new PHPMailer(true);
    
    try {
        // 基本設定
        $mail->CharSet = 'UTF-8';
        $mail->isSMTP();
        $mail->Host       = 'smtp.gmail.com';
        $mail->SMTPAuth   = true;
        $mail->Username   = 'your@gmail.com';      // Gmail 帳號
        $mail->Password   = 'your_app_password';   // 應用程式密碼(非登入密碼)
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL
        $mail->Port       = 465;
        
        // 除錯(開發時啟用,上線關閉)
        $mail->SMTPDebug = SMTP::DEBUG_OFF; // SMTP::DEBUG_SERVER 輸出詳細日誌
        
        // 寄件人 / 收件人
        $mail->setFrom('your@gmail.com', '系統名稱');
        $mail->addAddress($to);
        $mail->addReplyTo('noreply@example.com', '客服');
        
        // 內容
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $body;
        $mail->AltBody = strip_tags($body); // 純文字備份
        
        // 附件(選用)
        // $mail->addAttachment('/path/to/file.pdf', 'rename.pdf');
        // $mail->addEmbeddedImage('/path/to/logo.png', 'logo_cid');
        // $mail->Body = '圖片: '; // 內嵌圖片
        
        $mail->send();
        return ['success' => true, 'msg' => '郵件發送成功'];
    } catch (Exception $e) {
        return ['success' => false, 'msg' => "發送失敗: {$mail->ErrorInfo}"];
    }
}

// 使用
$result = sendMail('user@example.com', '測試主旨', '

HTML 內容

支援中文

'); var_dump($result);

Gmail 重要設定提醒

  1. 啟用「兩步驟驗證」。
  2. 建立「應用程式密碼」(16 碼),填入 $mail->Password。
  3. 若使用企業版 Google Workspace,確認管理員已開啟「安全性較低的應用程式存取權」或允許 SMTP 發送。

常見問題排查

現象可能原因解決
Connection timeoutPort 465/587 被防火牆阻擋確認主機出站規則,或改用 587 + TLS
Authentication failed密碼錯誤 / 未啟用應用程式密碼重新產生應用程式密碼
Certificate verify failed本機 CA 憑證過舊更新 ca-bundle.crt 或暫時關閉驗證(不建議生產環境)
郵件進垃圾桶SPF/DKIM/DMARC 未設定 / 內容觸發規則設定網域 DNS 記錄、優化內容、使用專用 IP

進階技巧

  • 批次發送:重複使用同一 $mail 物件,迴圈內僅呼叫 addAddress、send、clearAddresses,避免重複建立 SMTP 連線。
  • 非同步佇列:搭配 Laravel Queue、Redis + Worker 或 RabbitMQ,將發送作業推入佇列,提升回應速度。
  • 模板引擎:整合 Twig / Blade 產生複雜 HTML 郵件。

PHPMailer 成熟穩定,配合 Gmail SMTP 即可零成本建立可靠發信服務,是中小型專案首選。

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