使用PHPMailer发邮件遇异常:SMTP连接失败且邮件未收到
解决PHPMailer连接Gmail SMTP失败及假成功问题
看你遇到的问题:SMTP连接报错SMTP ERROR: Failed to connect to server: (0),还出现“发送成功”的假提示但实际收不到邮件,我帮你梳理几个关键排查点和解决方案:
1. 优先解决Gmail SMTP的认证方式问题
Gmail早就不允许用普通账号密码直接登录SMTP了,这是最常见的坑:
- 先给你的Google账号开启两步验证(2FA)
- 然后生成一个应用专用密码(App Password),把这个密码替换代码里的
'password'字段 - 注意:如果你的账号是Google Workspace(原G Suite),还要确认管理员没禁用SMTP服务
2. 检查网络与端口限制
错误码(0)说明TCP连接都没建立起来,大概率是端口被拦截:
- 试试把SMTP配置换成TLS协议:
$mail->SMTPSecure = 'tls'; $mail->Port = 587; - 联系你的主机服务商,确认服务器是否允许出站访问465/587端口(很多共享主机默认会封这些端口)
- 本地测试的话,关闭防火墙、杀毒软件试试,看是不是它们拦截了PHPMailer的网络请求
3. 修复代码里的异常处理逻辑
你提到“系统显示邮件发送成功”但实际失败,很可能是代码没正确捕获异常:
- 确保你的代码完整包含
try-catch块,并且在try里执行$mail->send(),在catch里输出错误信息:try { // 你的SMTP配置代码... $mail->setFrom('from@example.com', 'Mailer'); $mail->addAddress('recipient@example.com', 'Recipient'); $mail->Subject = 'Test Email'; $mail->Body = 'This is a test email'; $mail->send(); echo '邮件发送成功'; } catch (Exception $e) { echo "邮件发送失败: {$mail->ErrorInfo}"; } - 没有
catch块的话,异常会被抛出但没处理,可能导致你误以为发送成功
4. 利用SMTPDebug排查细节
你已经开了SMTPDebug = 2,仔细看输出的调试信息:
- 如果显示“Connection refused”,就是端口被封或者SMTP地址写错了
- 如果显示“Authentication failed”,就是密码(应用专用密码)有问题或者2FA没开
内容的提问来源于stack exchange,提问作者Daniel Lau
相关产品推荐
相关产品推荐

