PHPMailer 是 PHP 最流行的郵件發送庫,支援 SMTP 驗證、SSL/TLS 加密、HTML/純文字郵件、附件、內嵌圖片、多收件人等企業級功能。本文整理其核心特色,並以 Gmail SMTP 為例示範完整發送流程。
推薦使用 Composer:
composer require phpmailer/phpmailer
或手動下載 PHPMailer.php、SMTP.php、Exception.php 三個檔案置入專案。
<?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);
$mail->Password。| 現象 | 可能原因 | 解決 |
|---|---|---|
| Connection timeout | Port 465/587 被防火牆阻擋 | 確認主機出站規則,或改用 587 + TLS |
| Authentication failed | 密碼錯誤 / 未啟用應用程式密碼 | 重新產生應用程式密碼 |
| Certificate verify failed | 本機 CA 憑證過舊 | 更新 ca-bundle.crt 或暫時關閉驗證(不建議生產環境) |
| 郵件進垃圾桶 | SPF/DKIM/DMARC 未設定 / 內容觸發規則 | 設定網域 DNS 記錄、優化內容、使用專用 IP |
$mail 物件,迴圈內僅呼叫 addAddress、send、clearAddresses,避免重複建立 SMTP 連線。PHPMailer 成熟穩定,配合 Gmail SMTP 即可零成本建立可靠發信服務,是中小型專案首選。