PHP 內置 mail() 函數功能有限:僅支持純文本、依賴本地 MTA(Windows 環境常失效)、無身份驗證導致進垃圾箱。PHPMailer 是功能強大的郵件發送庫,支持 SMTP 認證、HTML 郵件、附件、嵌入圖片、多收件人等,是現代 PHP 項目的標準選擇。
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 認證 |
SMTPSecure | PHPMailer::ENCRYPTION_SMTPS (SSL, 465) 或 PHPMailer::ENCRYPTION_STARTTLS (TLS, 587) |
CharSet = 'UTF-8' | 必須設置,否則中文亂碼 |
isHTML(true) | 啟用 HTML 格式 |
AltBody | 非 HTML 客戶端的備選純文本內容 |
addAttachment() | 添加附件,第二參數可自定義文件名 |
addEmbeddedImage() | 嵌入圖片,HTML 中引用 cid:標識符 |
telnet smtp.gmail.com 465。CharSet = 'UTF-8' 且文件編碼為 UTF-8 無 BOM。addAddress() 並 send(),每次發送後 clearAddresses();或使用郵件隊列(如 Laravel Queue + PHPMailer)。Body。PHPMailer 官方文檔:GitHub Repository,建議通過 Composer 安裝:composer require phpmailer/phpmailer。