phplist 是一套成熟的開源郵件群發系統,其核心發信引擎倚賴 PHPMailer。對於大多數 SMTP 服務(如 Sohu、QQ 郵箱、企業郵箱),依照 phplist 基礎配置教程 即可順利發信。但 Gmail 強制要求 SSL/TLS 加密連線,舊版 PHPMailer(phplist 2.10.12 內建的 v1.73 版本發布於 2005 年)並不支援 SSL 驗證,導致連線失敗,錯誤日誌僅提示 Mailer Error: The following From address failed...,極易誤判為寄件者地址格式錯誤。
將 config.php 中的帳號密碼故意填錯,測試發信仍回報相同錯誤,證實 phplist 根本未與 smtp.gmail.com 建立連線。問題鎖定在內建的舊版 PHPMailer 上。
從 PHPMailer 官方倉庫 下載最新穩定版(文中以 v5.1 為例),解壓後關注兩個核心檔案:class.phpmailer.php 與 class.smtp.php。
官方文件 docs/use_gmail.txt 提供範例,但需修正未定義函數呼叫。建立測試腳本 test_gmail.php:
<?php
require_once 'class.phpmailer.php';
require_once 'class.smtp.php';
$mail = new PHPMailer();
$mail->SMTPDebug = 1; // 關鍵:開啟 SMTP 除錯輸出
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = 'your_account@gmail.com';
$mail->Password = 'your_app_password'; // 建議使用應用程式密碼
$mail->SetFrom('your_account@gmail.com', 'Webmaster');
$mail->AddAddress('recipient@example.com', 'Test User');
$mail->Subject = 'PHPMailer Gmail SSL Test';
$mail->MsgHTML('<b>測試內容</b>');
if (!$mail->Send()) {
echo '發送失敗:' . $mail->ErrorInfo;
} else {
echo '郵件已成功發送!';
}
?>
若瀏覽測試頁面出現 Unable to find the socket transport "ssl",請編輯 php.ini:
;extension=php_openssl.dll,移除前置分號ssleay32.dll 與 libeay32.dll 複製至 C:\Windows\System32(或加入系統 PATH)class.phpmailer.php、class.smtp.php 覆蓋 lists/admin/phpmailer/ 下的同名檔案lists/admin/class.phplistmailer.php 約第 36 行,插入 SSL 相關設定:$this->IsSMTP(); // 新增:明確指定使用 SMTP
$this->SMTPAuth = true;
$this->SMTPSecure = 'ssl'; // 新增:啟用 SSL
$this->Helo = getConfig('website');
$this->Host = PHPMAILERHOST;
$this->Port = 465; // 新增:Gmail SSL 埠號(預設 25 不適用)
透過升級 PHPMailer、啟用 OpenSSL、修正 phplist 發信類別三步驟,即可讓 phplist 穩定經由 Gmail SMTP 發送郵件。此法同樣適用於獨立使用 PHPMailer 專案的 Gmail 整合。