php邮件发送失败主因是smtp参数不匹配:qq邮箱须ssl+465,163邮箱推荐ssl+465或tls+587,gmail必须tls+587,outlook用tls+587;phpmailer需显式配置host、smtpauth、username(全名)、password(应用密码)、smtpsecure(严格对应端口)、port(465或587),并启用openssl、放行云服务器端口、开启smtpdebug调试。

PHP邮件发送失败,八成不是代码写错了,而是SMTP参数没配对——端口、加密方式、服务器地址三者必须严丝合缝,错一个就连接不上。
先盯死邮箱服务商的硬性要求
不同邮箱对SMTP协议和端口是“认死理”的,不能靠猜:
- QQ邮箱(含腾讯企业邮箱):只认 ssl + 465,填 tls 或 587 会直接拒绝
- 163邮箱:国内推荐用 ssl + 465;也可选 tls + 587,但稳定性略低
- Gmail:必须用 tls + 587;填 ssl + 465 会报 “Unable to connect with TLS”
- Outlook/Hotmail:用 tls + 587
PHPMailer里关键参数要手动写全
别依赖默认值,尤其不能让 port=25 —— 这个端口在国内云服务器上基本全被封了:
-
Host:填完整域名,如
smtp.qq.com,别漏smtp. -
SMTPAuth:必须设为
true -
Username:填发件邮箱全名,比如
yourname@qq.com - Password:用应用专用密码(App Password),不是登录密码;Gmail/163/QQ 都要开两步验证后生成
-
SMTPSecure:严格对应端口——
'ssl'配 465,'tls'配 587 -
Port:明确写
465或587,不写默认值
环境级检查不能跳过
参数再对,环境卡住也白搭:
- 确认 OpenSSL 扩展已启用:运行
php -m | grep openssl,没输出就去 php.ini 解开extension=openssl,然后重启 PHP-FPM 和 Web 服务 - 云服务器(阿里云、腾讯云等)要手动在安全组放行 465 或 587 端口,光配 PHP 没用
- 本地开发(XAMPP/phpStudy)建议绕过 mail(),直接用 PHPMailer + SMTP,避免 sendmail.exe 配置陷阱
调试时打开错误反馈
别让失败静默发生:
- PHPMailer 加上
$mail->SMTPDebug = 2;,能看到完整握手日志 - 捕获异常:
try { $mail->send(); } catch (Exception $e) { echo $mail->ErrorInfo; } - 用
telnet smtp.qq.com 465(Linux/macOS)或Test-NetConnection smtp.qq.com -Port 465(Windows PowerShell)实测网络连通性
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











