我们有一个 Linux (Debian) VPS,带有已设置 SPF 的域名(假设 example.com 带有 MX mail.example.com)。正在运行 dovecot+exim。此外还有 Direct Admin。
当我向国外服务器发送邮件时,一切都正常。邮件中有服务器 IP,SPF 检查也正常。
一些数据发生了变化(域等):
Received: from mail.example.com (mail.example.com. [188.40.153.39])
by mx.google.com with ESMTPS id ***.7.2015.02.18.04.09.46
for <*@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Wed, 18 Feb 2015 04:09:47 -0800 (PST)
Received-SPF: pass (google.com: domain of [email protected] designates 188.40.153.39 as permitted sender) client-ip=188.40.153.39;
但是,当我将其从本地邮箱发送到另一个本地邮箱,然后通过 POP3 将邮件发送到 Gmail 时,我遇到了 SPF 问题,因为消息包含原始客户端 IP 地址,而 SPF 检查失败。
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) [email protected]
Received-SPF: fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) client-ip=82.160.100.10;
82.160.100.10 是原始发件人的 IP。
由于这个问题,我们的内部通信往往会被通过 Gmail 检查邮箱的人标记为垃圾邮件。
有什么想法可以解决这个问题吗?
编辑:测试邮件的标题(更改了我们的 IP 和域名)
1)从一个邮箱发送到另一个邮箱的电子邮件 - 来自 Thunderbird 客户端的标题:
Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Thu, 19 Feb 2015 11:41:20 +0100
Received: from nat10.net08-g2.isko.net.pl ([82.160.100.10] helo=[11.0.0.22])
by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
(Exim 4.83)
(envelope-from <[email protected]>)
id 1YOOPC-0005Ud-Qq
for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100
Message-ID: <[email protected]>
Date: Thu, 19 Feb 2015 11:41:18 +0100
From: Head Developer <[email protected]>
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: Zbyszek <[email protected]>
Subject: This is test
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
2)同一封邮件被gmail接收后(通过POP3自动常规导入):
Delivered-To: *@gmail.com
Received: by 10.140.86.210 with SMTP id p76csp775880qgd;
Thu, 19 Feb 2015 02:47:12 -0800 (PST)
X-Received: by 10.140.102.165 with SMTP id w34mr10762910qge.26.1424342832562;
Thu, 19 Feb 2015 02:47:12 -0800 (PST)
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) [email protected]
Received-SPF: fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) client-ip=82.160.100.10;
Received: by 10.224.31.8 with POP3 id w8mf619596qac.5;
Thu, 19 Feb 2015 02:47:12 -0800 (PST)
X-Gmail-Fetch-Info: [email protected] 2 mail.example.com 110 [email protected]
Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Thu, 19 Feb 2015 11:41:20 +0100
Received: from nat10.net08-g2.isko.net.pl ([82.160.100.10] helo=[11.0.0.22])
by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
(Exim 4.83)
(envelope-from <[email protected]>)
id 1YOOXn-0005j5-Tm
for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100
Message-ID: <[email protected]>
Date: Thu, 19 Feb 2015 11:41:18 +0100
From: Head Developer <[email protected]>
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: Zbyszek <[email protected]>
Subject: This is test
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
编辑:一些额外的信息
- 交付方式是 SMTP(我在家里使用邮箱从 Thunderbird 发送电子邮件[电子邮件保护]到同一服务器上的另一个邮箱[电子邮件保护])
- 82.160.100.10 是我的家庭 IP,nat10.net08-g2.isko.net.pl 是我的家庭主机名,可解析为该 IP
- 10.140.102.165 是 gmail 服务器 IP
- 11.0.0.22 是我家庭网络中的本地 IP
- 邮件服务器 IP 不在任何标题中(如果存在则为 188.40.153.39)。
- 主机名 mail.example.com 指向邮件服务器 IP
- 域名 IP 不在任何标头中(如果存在,我会将其更改为 85.17.23.59)
- 域名有正确的 MX 条目(指向子域名 mail.example.com)
- SPF 记录:“v=spf1 a mx ip4:188.40.153.39 -all”
编辑:未披露 IP,因为不太敏感
答案1
免责声明:在 GMail 人员确认之前,这个答案仍为猜测。
看起来是 GMail 错误处理了您在此处获取的电子邮件。有些人还报告了与您类似的情况这里,这里或者这里
问题是:GMail 通过 POP3 获取电子邮件后,在扫描电子邮件时也会部署 SPF 措施。
通常,SPF 检查在 SMTP 事务中通过检查发件人地址和客户端 IP 地址的域部分进行。但在 POP3 中,GMail 必须解析标头并找到最后一个Received
标头。
Received: from nat10.net08-g2.* ([*.160.100.10] helo=[11.0.0.22])
by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
(Exim 4.83)
(envelope-from <[email protected]>)
id 1YOOXn-0005j5-Tm
for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100
这是从您的服务器获取的原始电子邮件。它表明您的电子邮件接受来自*.160.100.10
发件人的电子邮件[电子邮件保护]. 在这个阶段Gmail 假装是您的服务器并检查发件人地址(example.com)和客户端 IP 地址(*.160.100.10)的域部分。结果如下:
SPF 软失败,因为[电子邮件保护]未指定 *.160.100.10 为允许的发件人
作为解决方法,您可以将 Gmail 过滤器设置为永远不将您的电子邮件标记为垃圾邮件。
答案2
Gmail 似乎有一个错误,它不尊重“已接收”标头中的 ESMTPA,因此无法显示 MUA 是受信任的主机。我想到了一些可能的解决方法:
- 使用拆分 MX,即一个 Exim 实例用于接收和转发经过身份验证的客户端的邮件,另一个实例用于接收至邮箱。这模拟了 Gmail 可能期望的 ISP 到 ISP 邮件,并且标头中将有一个与 SPF 记录匹配的 IP 地址。
- 在顶部添加一个 Received 标头,通过添加 add_header = 来模拟上述传输
Received: by 10.224.31.8 with ESMTP ....
- 对于通过 POP 在 Gmail 中检查邮件的用户,将副本转发到他们的 Gmail 帐户。
答案3
我遇到了同样的问题,我使用以下 Google 文档修复了它。这可能对你也有帮助,值得一试。
https://support.google.com/a/answer/33786?hl=en
您必须将以下记录添加到现有的 spf TXT 记录中。这有助于 Google 识别电子邮件地址的来源。
include:_spf.google.com
因此,您必须按如下方式更新您的 spf 记录。
SPF 记录:"v=spf1 a mx ip4:188.40.153.39 include:_spf.google.com -all"
然后尝试发送电子邮件,如果您的 IP 信誉良好,它会直接到达您的收件箱。