正确使用SMTP“发件人”标题?

当有人发布新内容时,我们的Web应用程序会向用户发送电子邮件 发件人和收件人都select从我们的应用程序接收电子邮件。 在准备这样的消息时,我们设置了以下SMTP头文件:

 FROM:[email protected]
 TO:[email protected]
 SENDER:[email protected]

我们select在FROM头中使用作者的电子邮件地址,试图为收件人提供最佳体验。 当他们在邮件客户端看到邮件时,作者很清楚。 为了避免欺骗的出现,我们添加了SENDER标头(使用我们自己的公司电子邮件地址),以明确表示我们是以作者的名义发送的。 阅读RFC 822和2822之后,这似乎是发件人标题的一个预期用途。

大多数接收邮件服务器似乎处理得很好; 电子邮件正常传送(假设收件人邮箱存在,未超过配额等)。 但是,当从一个域中的地址发送消息到同一个域中的一个地址时,一些接收域将拒绝这样的消息,其响应如下:

 571不正确的IP  -  psmtp(回复RCPT TO命令)

我认为这意味着接收服务器只能看到FROM头域地址在它自己的域中,并且这个消息源自一个服务器,它不认为授权为那个域发送消息。 换句话说,接收服务器忽略了SENDER头。

我们有一个解决方法:webapp保留一个似乎忽略SENDER头的这样的域的列表,当FROM和TO头都在这样的域中时,它将FROM头设置为我们自己的电子邮件地址。 但是这个清单需要维护。

有没有更好的方法来达到预期的体验? 我们希望成为networking上的“好公民”,所有相关方(发件人和收件人)都希望参与并接收这些信息。 一种替代方法是始终在FROM标题中使用我们的公司电子邮件地址,并将作者的姓名/地址添加到主题中,但这看起来有点笨拙。

你在看错误的东西。 这些是消息标题 。 你应该看看SMTP 信封 。 (如何指定信封取决于您的应用程序是如何将邮件提交给邮件系统的。在许多系统中,信封由邮件提交实用程序的命令行参数指定。)根据协议事务它决定发出该571响应,SMTP中继服务器甚至可能根本就没有看到消息标题。

响应文本说明您正在与之通话的特定SMTP中继服务器的pipe理员已经限制了您可以放入SMTP信封中的内容。 它似乎在抱怨信封的收件人部分。 但是它可能会推迟信封发送者的确认,直到第一个接收者的指定,所以它可能是抱怨发送者。

请注意,信封发件人是发送状态信息的地方,而您希望将这些信息发送给世界各地的随机人员。 (除了许多人不喜欢这样的事实之外,将邮件的递送状态信息返回给除你以外的任何人是没有意义的。)将自己指定为信封发件人。

顺便提一下,要求MX资源logging是错误的。 在没有任何MX资源logging的情况下,可以通过AAAAA资源loggingAAAA SMTP中继服务器。 请参阅RFC 5321第5.1节。

我可能是错的,但上述错误的最可能的原因,特别是在Postini的情况下,您被拒绝的域具有严格的SPF策略。 大多数使用SPF检查的邮件服务器只会检查“发件人”标题,而不会关心“发件人”标题。

要检查是否是这种情况运行“挖掘+短TXT domain.com”,其中domain.com是什么给你的错误信息。 你应该找回像这样的东西:

“v = spf1 mx -all”

重要的部分是 – 所有。 这意味着域名所有者已经声明,他们只会从作为邮件服务器的服务器发送邮件,其他邮件将被拒绝。

幸运的是,如果是这种情况,您可以在发送电子邮件之前主动检查! 当用户input他们的电子邮件地址时,让WebApp进行SPF检查。 如果有严格的政策,请将该域添加到您的列表中。 所有可以进行SPF检查的语言都不缺less图书馆。