我为一家小公司开发了一个内部管理应用程序,用Python编写,运行在Linode VPS上,用户可以用它偶尔向客户发送电子邮件。电子邮件非常简单:带有PDF发票附件的文本部分(即HTML),使用email stdlib模块创建,并通过外部SMTP服务器发送(该服务器不托管在VPS上)。
一段时间以来,一切都运行得相当顺利,但最近我收到了一些抱怨,说邮件被接收者的服务器归类为垃圾邮件。我向http://www.mail-tester.com发送了一封测试邮件,发现添加一些缺少的标题(特别是Date和Message-ID )有助于减少邮件的“垃圾”级别。然而,有一个与SPF相关的SpamAssassin问题仍未解决:
SPF_HELO_SOFTFAIL SPF: HELO does not match SPF record (softfail)我试着将测试邮件发送到我的Gmail帐户,下面是当我做“显示原件”时可以找到的相关标题:
Received-SPF: pass (google.com: domain of <sender_address> designates <ip_smtp_server> as permitted sender) client-ip=<ip_smtp_server>;
Received: from [<ip_linode_vps>] (helo=<domain_name_linode_vps>)通过这里和那里收集到的其他信息,我确信这个问题可以通过修改SMTP服务器域的SPF记录来解决(它已经存在,作为一个包含"v=spf1 a mx... ~all"引用到<ip_smtp_server>的ip4字符串的TXT记录),但是我目前的理解还不够,所以我希望得到任何帮助。
<ip_linode_vps> = 69.164.216.89
<domain_name_linode_vps> = li131-89.members.linode.com
<ip_smtp_server> = 192.99.17.51
<domain_name_smtp_server> = mail.roucet.com
<already_existing_spf_record> = "v=spf1 a mx ip4:192.99.17.51 ip4:158.85.89.116 ip4:158.85.77.121 ~all"发布于 2014-12-13 04:48:27
所有授权邮件服务器都应在SPF记录中列出。由于您现在有一个新的授权邮件服务器,应该添加它。一些垃圾邮件检查区分列出的(A,MX)和允许的(~all),并且不会将未列出的地址视为通行证。这将惩罚那些不通过批准的服务器发送(通常是垃圾邮件)的发送者。~all策略表明,与可能阻止或隔离电子邮件的-all策略相比,用户并不真正关心谁使用他们的域。
另一种方法是将新服务器配置为使用现有服务器中继消息。应用程序通常允许配置电子邮件中继服务器。在python中,您将配置VPS服务器名而不是localhost。
无论哪个服务器发送电子邮件,它都应该在接收来自应用程序的消息时添加所需的标头。或者,您可以在应用程序中添加标头。日期标题中有日期的定义格式。Message-id报头有一个定义的格式,但它没有那么严格。消息id类似于电子邮件地址,但左侧应该是唯一的id。
https://serverfault.com/questions/652293
复制相似问题