PHP 8.5.5 本身不带 SMTP 发送能力,必须用 PHPMailer v6.9.0+;它虽为维护分支而非正式稳定版,但已获明确支持,旧版(如 v6.1.x)会因类型声明不兼容直接报错。

PHP 8.5.5 本身不带 SMTP 发送能力,必须用第三方库;当前稳定版 PHP 是 8.3,所谓 “8.5.5” 实际是维护分支(非正式稳定发布),但 PHPMailer v6.9+ 已明确支持该分支——关键不是版本号,而是你用的 PHPMailer 版本、端口/加密组合、以及云服务器是否放行出站连接。
PHPMailer 必须用 v6.9.0+ 才能跑通 PHP 8.5.5
旧版 PHPMailer(比如 v6.1.x 或更早)在 PHP 8.5.5 下会直接报错:Fatal error: Declaration of PHPMailer\PHPMailer\PHPMailer::setLanguage()。这不是配置问题,是类型签名不兼容。
- 用
composer require phpmailer/phpmailer:^6.9安装,别用dev-master—— 它可能含未合入的补丁,不稳定 - 确认已加载自动加载器:
require 'vendor/autoload.php'; - 初始化时启用异常:
$mail = new PHPMailer\PHPMailer\PHPMailer(true);,否则错误会被吞掉
SMTP 端口与加密方式必须严格匹配服务商要求
填错端口或加密协议,连接会在 TLS 握手阶段失败,send() 直接抛出 SMTP Error: Could not connect to SMTP host,而不是认证失败。
- Gmail:只认
Port = 587+SMTPSecure = 'tls';填'ssl'或465会报Unable to connect with TLS - QQ 邮箱(含腾讯企业邮箱):强制
Port = 465+SMTPSecure = 'ssl';用587或'tls'一律拒绝 - 163 邮箱:推荐
465 + ssl(国内网络更稳),587 + tls也可用,但需确保 DNS 解析正常 - 阿里云/腾讯云自建 SMTP:查控制台文档,部分子域名要求
587 + tls,部分要求465 + ssl
三行基础配置漏掉任何一行都会发不出
只设 Host、Username、Password 不够,Gmail/Outlook 类服务会直接返回 Authentication failed。
立即学习“PHP免费学习笔记(深入)”;
-
$mail->SMTPAuth = true;:不加这行,认证流程跳过,密码白填 -
$mail->Port = 587;(或465):不设就走默认25,而云服务器几乎全封了25出站 -
$mail->CharSet = 'UTF-8';:不设中文主题/收件人名变问号或空,不是乱码,是彻底丢字
云服务器防火墙和 openssl 扩展是隐形拦路虎
本地 telnet smtp.gmail.com 587 通 ≠ 服务器上通。云平台默认屏蔽 SMTP 出站端口,且 PHP 必须启用 openssl 才能建立 TLS/SSL 连接。
- 登录云控制台(阿里云/腾讯云等),进「安全组」→ 添加「出站规则」:协议 TCP,端口
465或587,目标0.0.0.0/0 - 执行
php -m | grep openssl,确认输出含openssl;没输出说明扩展未启用,需改php.ini开启extension=openssl - 测试连通性不要只信
ping,要用telnet smtp.qq.com 465(或对应服务商域名+端口);超时或Connection refused就是防火墙或 ISP 拦截
最常被忽略的是:PHPMailer 的 Username 和 setFrom() 必须一致(同邮箱地址),哪怕只是别名——别名必须先在邮箱后台验证,再填进 Username;否则 Gmail/Outlook 会静默拒信,日志里只显示 “Message rejected”。



















