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

phplist 與 PHPMailer 整合 Gmail SMTP 發送郵件完整配置指南

     編輯:PHP 綜合知識

前言:為什麼 Gmail 配置特別棘手?

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...,極易誤判為寄件者地址格式錯誤。

核心問題診斷:根本未連上 SMTP 伺服器

將 config.php 中的帳號密碼故意填錯,測試發信仍回報相同錯誤,證實 phplist 根本未與 smtp.gmail.com 建立連線。問題鎖定在內建的舊版 PHPMailer 上。

解決方案:升級 PHPMailer 並啟用 OpenSSL

步驟 1:取得最新 PHPMailer

從 PHPMailer 官方倉庫 下載最新穩定版(文中以 v5.1 為例),解壓後關注兩個核心檔案:class.phpmailer.php 與 class.smtp.php。

步驟 2:驗證 Gmail SSL 連線可行性

官方文件 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 '郵件已成功發送!';
}
?>

步驟 3:啟用 PHP OpenSSL 擴充模組

若瀏覽測試頁面出現 Unable to find the socket transport "ssl",請編輯 php.ini:

  • 搜尋 ;extension=php_openssl.dll,移除前置分號
  • Windows 環境須將 PHP 目錄下的 ssleay32.dll 與 libeay32.dll 複製至 C:\Windows\System32(或加入系統 PATH)
  • 重啟 Apache / PHP-FPM

步驟 4:替換 phplist 內建 PHPMailer 並修改核心配置

  1. 用新版 class.phpmailer.php、class.smtp.php 覆蓋 lists/admin/phpmailer/ 下的同名檔案
  2. 編輯 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 不適用)

常見坑點提醒

  • 應用程式密碼:Google 現強制要求兩步驟驗證帳號使用「應用程式密碼」而非主密碼
  • 防火牆/雲端安全組:確認伺服器出站規則允許 TCP 465 埠
  • PHP 版本相容:PHPMailer 6.x 需 PHP 5.5+,舊環境請選用 5.2 相容分支

總結

透過升級 PHPMailer、啟用 OpenSSL、修正 phplist 發信類別三步驟,即可讓 phplist 穩定經由 Gmail SMTP 發送郵件。此法同樣適用於獨立使用 PHPMailer 專案的 Gmail 整合。

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