Gmail和本地ISP通过Exim邮件的DKIM认证,但微软未能通过,在头部注明了失败:
Authentication-Results: spf=pass(发件人IP为[正确的IP]) smtp.mailfrom=[correct domain].co.uk; outlook.com; dkim=fail(签名未验证通过) header.d=[correct domain];outlook.com; dmarc=bestguesspass action=none header.from=[correct domain];
我尝试过:
我通过Google Apps(G Suite)电子邮件从同一域向Outlook发送电子邮件(使用不同的DKIM选择器,即另一个公钥在另一个DNS TXT记录中),以比较消息来源。Google的消息通过了DKIM。
我注意到两件事:
Google在"h"标签中包含的头文件要少得多,因此我重新配置了Exim,也使用了这些精确的头文件,但是没有成功。
Google在"h"标签中以小写字母包含头文件名称,而Exim则不是,即使我在Exim的配置中输入它们时使用小写字母。我读到在生成
时应该将头文件名称转换为小写字母,但是文本没有说明同样适用于"h"标签中的头文件名称(http://dkimcore.org/specification.html第3.2节),但是Google似乎是这样做的。我想在Exim中覆盖这个可能会很难吧?
我还注意到除了"h"中的差异之外,DKIM-Signature头结构在两者中完全相同,除了一些空格差异(Exim只在分号分隔符后有空格和新行,所以看起来没问题,只是分割方式不同)。起初我以为Exim没有设置一些必需的标签,但在这种情况下错误应该是不同的。
Exim版本:4.87 运行在一个cPanel 11 CentOS 7.2服务器上 Exim DKIM配置:dkim_remote_smtp:
driver = smtp
interface = <; ${if exists {/etc/mailips}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/maili
ps}{$value}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailips}{$value}{${lookup{${perl{get_
sender_from_uid}}}lsearch*{/etc/mailips}{$value}{}}}}}}}}
helo_data = ${if exists {/etc/mailhelo}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailhel
o}{$value}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailhelo}{$value}{${lookup{${perl{get_
sender_from_uid}}}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}}}}}{$primary_hostname}}
dkim_domain = ${lc:$sender_address_domain}
dkim_selector = default
dkim_private_key = "/var/cpanel/domain_keys/private/${dkim_domain}"
dkim_canon = relaxed
dkim_sign_headers = to:from:subject:message-id:date:user-agent:mime-version:content-transfer-encoding
由于错误似乎特别与签名验证有关,我不认为以下内容与问题有关,但我仍然包括在内:
Exim电子邮件是由服务器上的Mr nobody发送的,但信封发件人和Return-Path标题是预期发件人的正确电子邮件地址。在这个领域不应该有任何问题,因为即使在MS上SPF也通过了。
虽然从Google发送的电子邮件有
Message-ID: <[id]@[sender's domain]>
Exim发送的电子邮件有
Message-ID: <[id]@[server主机名]>
有什么帮助/想法吗?
(最后一行是我添加的-之前它也没有起作用)
dkim_sign_headers = to:from:subject:message-id:date:user-agent:mime-version:content-transfer-encoding
。 - NetVicious