我使用 AWS SES 发送邮件,使用 CloudFlare 进行 DNS 管理。我按照以下方法设置了 DKIM本教程. 效果很好。
当用户提供 hotmail.com 地址并将其转发到 Gmail 时,我会收到一封电子邮件,例如:
mx.google.com gave this error:
This mail is unauthenticated, which poses a security risk to
the sender and Gmail users, and has been blocked. The sender
must authenticate with at least one of SPF or DKIM. For this
message, DKIM checks did not pass and SPF check for [...] did not pass
with ip: [...]. The sender should visit
https://support.google.com/mail/answer/81126#authentication
for instructions on setting up authentication. ...
Original message headers:
Received: from ...PROD.OUTLOOK.COM
...
Resent-From: <[email protected]>
...
Authentication-Results: spf=pass (sender IP is ...)
smtp.mailfrom=...; dkim=fail (signature did not verify)
header.d=...;dmarc=pass action=none header.from=...;compauth=pass
reason=100
...
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;
s=2c2dtovttix6omay...; d=...; t=16791...;
h=Content-Type:From:To:Subject:Message-ID:Date;
bh=kVq8FB...=;
b=XTEQr2EZ30...=
标头表明 SPF 通过,DKIM 失败,这与初始文本相反。我不确定为什么。
当我将电子邮件从 Hotmail 转发到 Gmail 时,我可以让我的域上的 DKIM 也起作用吗?
更新
我创建了一个 Hotmail 地址,并从同一个发件人那里发送了一封电子邮件,转发成功了。我还从另一个域名发送了另一封电子邮件,这个域名也是我拥有的,但几乎从未使用过,所以我确信我的 Gmail 从未见过第二个发件人。
答案1
当电子邮件从 Hotmail 帐户转发到 Gmail 帐户时,如果转发过程更改了邮件或其标头的任何部分,DKIM 签名可能无法验证。这是因为 DKIM 依靠加密哈希来生成对每封邮件(包括邮件标头)唯一的签名。如果邮件以任何方式被修改,例如添加新标头或更改现有标头的顺序,签名将不再与原始邮件匹配,并且无法验证。
此外,转发邮件时,转发服务通常会将自己的标头添加到邮件中,这也会导致 DKIM 签名失败。这是因为原始签名是由发件人的域而不是转发服务创建的,因此添加的标头会导致邮件看起来像是从其他域发送的。
为了避免在转发电子邮件时出现 DKIM 故障,建议用户不要转发带有 DKIM 签名的邮件,或将其电子邮件客户端(例如 hotmail)配置为以附件而非内联方式转发邮件。此外,发件人的域可以采取措施,确保在转发邮件时其 DKIM 签名仍然有效,方法是使用诸如“重新签名”邮件等技术,使用新签名(其中包含转发过程中添加的附加标头)对邮件进行签名。