我正在开发一款可供客户发送电子邮件的应用程序。为了实现该功能,我拥有一个 SMTP 服务器帐户,该服务器具有自己的域名,仅用于发送电子邮件。
我希望自己的电子邮件不为人知,因此当客户发送电子邮件时,我会将他们的电子邮件地址放入“发件人”字段。
电子邮件已成功发送。一些提供商(如 Gmail)抱怨他们无法验证发件人,但确实有效!
如果发送电子邮件时使用的“发件人”与实际通过 SMTP 验证的发件人不同,那么可能存在哪些问题?您将如何解决这一难题?
答案1
当发送电子邮件时,如果“发件人”与实际通过 SMTP 验证的“发件人”不同,可能会出现哪些问题?
正如您所注意到的,提供商会抱怨无法验证发件人。
电子邮件域可以使用 SPF 来定义允许从该域发送邮件的 SMTP 服务器 IP 地址列表(例如,只有 Google 服务器才允许以“@gmail.com”的身份发送邮件)。即使在常见的“软失败”SPF 策略情况下,发件人 IP 检查失败也会显著增加邮件的“垃圾邮件分数”。
但如果域的默认 SPF 结果设置为“hardfail”,则 SPF 检查失败(即您的应用试图欺骗发件人)就足以将该邮件放入垃圾邮件文件夹。
此外,如果“发件人”域的 DMARC 策略设置为“拒绝”,这将告诉收件人操作员他们应该立即拒绝传递时无法验证的消息。
例如,@yahoo.com 具有严格的 DMARC 政策,如果您尝试在“发件人:”中使用其域名,则 Gmail(和其他运营商)将在 SMTP 对话期间拒绝该邮件:
550-5.7.1 Unauthenticated email from yahoo.com is not accepted due to domain's
550-5.7.1 DMARC policy. Please contact administrator of yahoo.com domain if
550-5.7.1 this was a legitimate mail. Please visit
550-5.7.1 http://support.google.com/mail/answer/2451690 to learn about DMARC
550 5.7.1 initiative. ib1si20883896wjb.147 - gsmtp
据我所知,当您仅转发具有来自原始域的 DKIM 签名的消息时(如果该域启用了 DMARC),SPF 源 IP 地址要求并不适用,但您当然不会在这里这样做 - 您正在创建自己的消息,因此您不能将别人的 DKIM 签名放在它们上面。
您将如何解决这一难题?
如果客户拥有该域名并希望您在他们自己的域下发送邮件,那么他们需要将您的服务器添加到他们的 SPF 记录中,并将您的 DKIM 公钥添加到 DNS 中的域中。这就是各种邮件列表和营销公司所做的。例如:
或者,客户也可以向您提供他们自己的出站 SMTP 服务器的详细信息 - 这就是 Gmail 允许用户携带自己的“发件人:”地址的方式;它通过用户指定的 SMTP 服务器中继这些消息,而不是尝试直接传递它们。
(最初,Gmail 从其自己的 MX 服务器发送此类邮件,但使用“发件人:”标头来指示真正的发件人地址 - 因此邮件会有,但。我认为这适用于From: [email protected]
Sender: [email protected]
一些因为他们还没有删除这个选项,但它可能会引发一系列额外的问题。)
但除此之外,不要做你想做的事。从你自己的域发送消息,如果需要,只需将发件人的邮件放在“回复”中即可。
(并且,避免使用类似的伎俩,因为它们不可避免地会出现在收件人的地址簿中,然后人们会不断将重要的东西发送到你的“无回复”地址,而不是 Fred 的真实地址......)From: Fred via MyApp <[email protected]>