SPF问题与SpamAssassin

我有一个用Python编写,运行在Linode VPS上的小公司的内部pipe理应用程序,用户可以通过它向客户发送偶尔的电子邮件。 电子邮件非常简单:带有PDF发票附件的文本部分(即不是HTML),使用email stdlib模块创build,并通过外部SMTP服务器(不在VPS上托pipe)发送。

一切都运行得相当顺利了一段时间,但最近我一直在接受抱怨,电子邮件通常被接收邮件服务器归类为垃圾邮件。 我发送了一封testing邮件到http://www.mail-tester.com ,发现添加一些丢失的标题(特别是DateMessage-ID )有助于减less我的消息的“垃圾”级别。 不过还有一个SPF相关的SpamAssassin问题仍然没有解决:

 SPF_HELO_SOFTFAIL SPF: HELO does not match SPF record (softfail) 

我尝试将testing电子邮件发送到我的Gmail帐户,以下是“Show Original”时可以find的相关标题:

 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服务器域的SPFlogging(已经存在,作为一个TXTlogging"v=spf1 a mx... ~all" <ip_smtp_server> "v=spf1 a mx... ~all"string包含一个ip4引用<ip_smtp_server> ),但我目前的理解是不够的,所以我会很感激任何帮助。

更新:

 <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" 

所有授权的邮件服务器都应该在SPFlogging中列出。 正如你现在有一个新的授权的邮件服务器,它应该被添加。 一些垃圾邮件检查区分列出的(A,MX)和允许的(〜全部),并且不会将未列出的地址视为通行证。 这会惩罚那些不通过批准的服务器发送的发件人(通常是垃圾邮件)。 ~all政策表明,用户并不关心谁使用他们的域,相比, -all政策,可以使电子邮件被阻止或隔离。

另一种方法是将新服务器configuration为使用现有服务器中继消息。 应用程序通常允许configuration电子邮件中继服务器。 在Python中,你可以configuration你的VPS服务器名称,而不是本地主机。

无论哪个服务器发送电子邮件,它应该在收到您的应用程序的消息时添加所需的标题。 或者,您可以在应用程序中添加标题。 date标题中有一个定义的date格式。 Message-id头部有一个定义的格式,但并不严格。 消息ID类似于电子邮件地址,但左侧应该是唯一的ID。