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

使用PHP的PHPMailer发送邮件遇阻:出现‘无法发送邮件’错误

解决PHPMailer发送Gmail邮件失败的问题

先排查代码中的明显错误

  • Gmail地址拼写错误:代码里$mail->Username = 'example@gamil.com';的gamil是拼写错误,应改为gmail,这会直接导致SMTP认证失败。
  • Gmail认证方式错误:当前Gmail已不再支持直接使用账户密码进行SMTP认证,需完成以下操作:
    1. 开启Google账户的两步验证
    2. 创建应用专用密码,用该密码替换代码中的mypassword

调试与排查手段

  • 开启SMTP调试模式:在SMTP配置段添加调试代码,获取详细错误信息(生产环境需关闭):
    $mail->SMTPDebug = 2; // 调试模式,显示SMTP交互全过程
    
  • 验证文件路径:确认PHPMailer-master文件夹位于当前脚本同级目录,避免因文件缺失导致运行错误。
  • 检查服务器端口与SSL:
    • 确认服务器的587端口未被防火墙或主机服务商封禁
    • 若遇到SSL证书验证问题,可临时添加以下配置(不推荐生产环境长期使用,建议配置合法证书):
      $mail->SMTPOptions = array(
          'ssl' => array(
              'verify_peer' => false,
              'verify_peer_name' => false,
              'allow_self_signed' => true
          )
      );
      

增强代码健壮性

添加表单数据验证,避免空值或无效邮箱导致的异常:

if (empty($name) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo '请填写有效的姓名和邮箱地址';
    exit;
}

修正后的完整代码示例

<form action="mail.php" method="post">
    <input type="text" name="name" required>
    <input type="email" name="email" required>
    <input type="submit" value="submit">
</form>

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require __DIR__ . '/PHPMailer-master/PHPMailer.php';
require __DIR__ . '/PHPMailer-master/Exception.php';
require __DIR__ . '/PHPMailer-master/SMTP.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = trim($_POST['name']);
    $email = trim($_POST['email']);

    // 表单数据校验
    if (empty($name) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo '请填写有效的姓名和邮箱地址';
        exit;
    }

    $mail = new PHPMailer(true);

    try {
        // SMTP配置
        $mail->isSMTP();
        $mail->SMTPDebug = 0; // 生产环境设为0,调试时改为2
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'example@gmail.com'; // 修正拼写错误
        $mail->Password = '你的应用专用密码'; // 替换为Gmail应用专用密码
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;

        // 发件人与收件人设置
        $mail->setFrom('example@gmail.com', 'Ahmed Maajid');
        $mail->addAddress('example@gmail.com');

        // 邮件内容
        $mail->isHTML(false);
        $mail->Subject = '网站新提交信息';
        $mail->Body = '姓名: ' . $name . "\n\n" . '邮箱: ' . $email;

        $mail->send();
        echo '邮件发送成功!';
    } catch (Exception $e) {
        echo '发送失败: ' . $mail->ErrorInfo;
    }
}
?>

额外注意事项

  • 若使用Gmail工作区(原G Suite),配置逻辑与普通Gmail一致
  • 部分主机服务商可能限制SMTP出站请求,需联系服务商确认是否允许连接Gmail的SMTP服务器

内容的提问来源于stack exchange,提问作者Ahmed Maajid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:16:12