使用PHP的PHPMailer发送邮件遇阻:出现‘无法发送邮件’错误
解决PHPMailer发送Gmail邮件失败的问题
先排查代码中的明显错误
- Gmail地址拼写错误:代码里
$mail->Username = 'example@gamil.com';的gamil是拼写错误,应改为gmail,这会直接导致SMTP认证失败。 - Gmail认证方式错误:当前Gmail已不再支持直接使用账户密码进行SMTP认证,需完成以下操作:
- 开启Google账户的两步验证
- 创建应用专用密码,用该密码替换代码中的
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
相关产品推荐
相关产品推荐

