You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:43