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

PHPMailer无法向Gmail发送邮件问题排查求助

Gmail邮件无法送达问题排查与解决

问题描述

  • 使用PHPMailer发送邮件可正常送达GMX等服务商,但无法送达Gmail账户,邮件既未进入Gmail垃圾邮箱,发件地址也未收到退信通知
  • 已在Google Postmaster Tool完成域名验证
  • 脚本运行于本地开发机器,与邮箱域名(rescueoffice.de)所在服务器不同;但通过邮件服务器Web界面发送邮件可正常送达Gmail

发送至GMX的邮件头信息

Return-Path: <info@rescueoffice.de>
Authentication-Results: gmx.net; dkim=none
Received: from dd38416.kasserver.com ([85.13.128.172]) by mx-ha.gmx.net (mxgmx101 [212.227.17.5]) with ESMTPS (Nemesis) id 1MmlP4-1pF3po3RYM-00joqF for <julia_reeh@gmx.de>; Thu, 08 Sep 2022 23:50:14 +0200
Received: from localhost (unknown [85.233.52.241]) by dd38416.kasserver.com (Postfix) with ESMTPSA id 33A4F44405D5 for <julia_reeh@gmx.de>; Thu, 8 Sep 2022 23:50:14 +0200 (CEST)
Date: Thu, 8 Sep 2022 21:50:13 +0000
To: Markus Bodmann <julia_reeh@gmx.de>
From: Intranet Rettungsdienst LK Harburg <info@rescueoffice.de>
Subject: =?UTF-8?Q?Logindaten_f=C3=BCr_Markus_Bodmann?=
Message-ID: <uUg4R9CgLINIj7xxWDaGHDxutEMuF1YIKKrJ0@localhost>
X-Mailer: PHPMailer 6.6.0 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
Envelope-To: <julia_reeh@gmx.de>
X-GMX-Antispam: 0 (Mail was not recognized as spam); Detail=V3;
X-Spam-Flag: NO

PHPMailer发送代码

function sendMail(string $from, string $to, string $toName, string $subject, string $body): bool
{
    $mail = new PHPMailer(true);
    $mail->CharSet = 'UTF-8';

    try {
        //Server settings
        $mail->isSMTP();
        $mail->Host         = MAIL_HOST;
        $mail->SMTPAuth     = true;
        $mail->Username     = MAIL_USER;
        $mail->Password     = MAIL_PASSWORD;
        $mail->SMTPSecure   = PHPMailer::ENCRYPTION_SMTPS;
        $mail->Port         = MAIL_PORT;

        //Recipients
        $mail->setFrom(MAIL_SENDER, $from);
        $mail->addAddress($to, $toName);

        //Content
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $body;

        $mail->send();

        return true;

    } catch (Exception $e) {
        return false;
    }
}

核心问题分析与解决

1. 本地机器发送的关键问题

从邮件头和场景对比,能定位几个触发Gmail拦截的核心点:

  • DKIM未签名:邮件头显示dkim=none,Gmail对邮件认证要求远高于GMX,缺少DKIM签名会直接触发静默拦截(无退信)
  • SPF认证不匹配:本地IP(85.233.52.241)不在域名SPF记录范围内,Gmail判定发件IP与域名归属不符,直接拦截
  • Message-ID不规范:用localhost作为Message-ID的域名部分,不符合邮件规范,降低邮件可信度

Web界面发送正常,是因为Web端直接使用邮件服务器的IP发送,该IP在SPF记录内,且服务器自动添加了DKIM签名。

2. 针对性修复步骤

(1)添加DKIM签名

登录邮件服务器管理后台(如kasserver.com控制面板)开启DKIM功能,生成密钥后在域名DNS中添加对应TXT记录,再在PHPMailer中开启DKIM支持:

$mail->DKIM_domain = 'rescueoffice.de';
$mail->DKIM_private = '/path/to/your/private.key';
$mail->DKIM_selector = 'default'; // 对应你设置的DKIM选择器
$mail->DKIM_identity = $mail->From;

(2)修正SPF记录

检查域名的SPF TXT记录,确保邮件服务器IP(85.13.128.172)在记录内,格式示例:
v=spf1 a mx ip4:85.13.128.172 ~all
不建议长期将本地IP加入SPF(家用IP信誉普遍较低),开发环境优先用邮件服务器SMTP发送。

(3)规范Message-ID

在PHPMailer中指定合法的Message-ID域名:

$mail->MessageID = '<' . md5(uniqid(time())) . '@rescueoffice.de>';

(4)确认SMTP配置正确性

确保代码中MAIL_HOST是邮件服务器的正确地址,SMTPSecure和Port匹配服务器要求(当前用的ENCRYPTION_SMTPS对应465端口,是常规配置)。

3. 验证修复效果

修复后发送测试邮件到Gmail,查看邮件头的Authentication-Results字段,确认出现dkim=pass和spf=pass的认证结果。若仍有问题,可通过Google Postmaster Tool查看域名的邮件送达率、信誉评分等数据,进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:42:28