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

PHPMailer报错:未连接状态下调用Mail()问题排查

排查PHPMailer“未连接状态下调用Mail()”错误的原因与解决方法

Hey there, let's break down why you're hitting that "Mail() called in unconnected state" error with PHPMailer. Looking at your code snippet, there are a few clear issues that are almost certainly causing this problem:

可能的错误原因

  • 错误的SMTP服务器地址:你当前使用的gmail-smtp-in.l.google.com是Google的收件端MX服务器(用来接收邮件的),根本不是用来发送邮件的SMTP服务器。PHPMailer无法通过这个地址建立发送连接,自然会抛出未连接的错误。
  • 代码不完整:你的代码片段里$mail->setFrom('neelsoni...没写完,而且缺少设置收件人、邮件主题、正文这些核心步骤——不过这是次要问题,最关键的还是服务器地址配置错误。
  • Gmail账号认证限制(潜在坑):就算修正了服务器地址,普通Gmail账号现在默认会阻止低安全性应用访问;如果你的账号开了两步验证,还得用专门的App密码,不然会认证失败。

分步解决方法

  1. 修正SMTP服务器地址
    把$mail->Host改成Google官方的发送SMTP服务器:

    $mail->Host = 'smtp.gmail.com';
    
  2. 补全完整的邮件发送代码
    确保代码包含所有必要步骤,比如设置收件人、主题、内容,最后调用发送方法。完整示例如下:

    <?php
    require 'PHPMailer_5.2.4/class.phpmailer.php';
    $mail = new PHPMailer;
    $mail->SMTPDebug = 2; // 改成2可以查看详细交互日志,方便排查隐藏问题
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com'; // 修正后的正确服务器
    $mail->SMTPAuth = true;
    $mail->Username = 'demotp18@gmail.com';
    $mail->Password = 'your-app-password-or-allowed-password'; // 注意下方的认证说明
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    
    // 配置发件人
    $mail->setFrom('demotp18@gmail.com', 'Your Display Name');
    // 添加收件人
    $mail->addAddress('recipient@example.com', 'Recipient Name');
    // 设置邮件主题
    $mail->Subject = 'Test Email via PHPMailer';
    // 设置邮件内容(支持HTML,用$mail->AltBody设置纯文本 fallback)
    $mail->Body = '<h1>This is a test email</h1><p>Sent successfully with PHPMailer and Gmail SMTP.</p>';
    
    // 尝试发送并处理结果
    if(!$mail->send()) {
        echo 'Message failed to send.';
        echo 'Error Details: ' . $mail->ErrorInfo;
    } else {
        echo 'Message sent successfully!';
    }
    ?>
    
  3. 处理Gmail的认证限制

    • 若未开启两步验证:需要在Google账号设置里开启「允许低安全性应用访问」(注意这会降低账号安全性,仅建议测试用)。
    • 若已开启两步验证:必须生成App密码,用这个密码代替普通账号密码填入$mail->Password。生成路径:Google账号 > 安全 > 两步验证 > App密码。
  4. 排查网络与端口问题
    确保你的服务器能访问smtp.gmail.com的587端口,没有被防火墙或服务商封禁。如果用ssl加密,端口改成463试试。

内容的提问来源于stack exchange,提问作者Neel Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:49