如何让我的发件人政策框架(SPF)通过?

时间:2011-12-14 18:22:52

标签: dns actionmailer postfix-mta spam spf

我正在从我的rails应用程序发送邮件但由于某种原因我从未得到SPF通过,它总是说失败或中立。

我已经设置了正向和反向DNS(我认为是正确的)。我跟着导游here无济于事。好消息是我的邮件最终没有垃圾邮件,但这对我来说还不够,我希望SPF能够通过。如果有人可以帮助我,我们将不胜感激。

我的主机名设置为mail.example.com。我将反向DNS设置为相同。但是,当我发送邮件时,我希望它来自help@example.com,而不是来自help@mail.example.com。当我从help@mail.example.com发送电子邮件时,我得到一个中性的SPF,但当我将其更改为help@example.com时,它会失败。我理解的方式是,如果它仍然来自FQDN它应该通过,但它不会。

这些是我的DNS记录:

A = mail xxx.xxx.xxx.xxx
A = example. xxx.xxx.xxx.xxx
A = www xxx.xxx.xxx.xxx
MX = example. mailstore1.secureserver.net.
MX = example. smtp.secureserver.net.
MX = example. mail.example.com.
TXT = v=spf1 mx include:mail.example.com -all.

前2个MX记录来自godaddy,但我正在使用slicehost托管该网站。另外,我有一些CNAME和NS记录,我认为这些记录没有帮助,但我提到它们的情况。

我在Ubuntu和rails 3上使用postfix。

有什么想法吗?

更新 这是我失败的邮件之一的标题

Delivered-To: myemail@gmail.com
Received: by 10.229.49.65 with SMTP id u1cs60507qcf;
        Mon, 12 Dec 2011 19:20:11 -0800 (PST)
Received: by 10.42.150.135 with SMTP id a7mr13973149icw.53.1323746409644;
        Mon, 12 Dec 2011 19:20:09 -0800 (PST)
Return-Path: <help@example.com>
Received: from mail.example.com ([xxx.xxx.xxx.xxx])
        by mx.google.com with ESMTP id y15si2866827ibk.138.2011.12.12.19.20.09;
        Mon, 12 Dec 2011 19:20:09 -0800 (PST)
Received-SPF: fail (google.com: domain of help@example.com does not designate xxx.xxx.xxx.xxx as permitted sender) client-ip=xxx.xxx.xxx.xxx;
Authentication-Results: mx.google.com; spf=hardfail (google.com: domain of help@example.com does not designate xxx.xxx.xxx.xxx as permitted sender) smtp.mail=help@example.com
Received: from localhost.localdomain (localhost [127.0.0.1])
    by mail.example.com (Postfix) with ESMTP id B6BB31C1F5D
    for <myemail@gmail.com>; Tue, 13 Dec 2011 03:20:08 +0000 (UTC)
Date: Tue, 13 Dec 2011 03:20:08 +0000
From: Example <help@example.com>
To: myemail@gmail.com
Message-ID: <4ee6c468a8150_7e4e4ea930773a1@mail.example.com.mail>
Subject: Password Reset
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

解: 在spf记录周围加上引号,我现在看起来像这样:

TXT = "v=spf1 mx include:mail.example.com -all"

1 个答案:

答案 0 :(得分:3)

基于评论的摘要:
引号在TXT记录的内容中很重要。空间计为分隔符。我遇到了一个DNS用户界面,在那里懒散地输入v = spf1 -all(注意缺少引号)导致两个原子“v = spf1”“ - all”而不是单个原子“v = spf1 -all”。只有后者才有效。

您的SPF记录搞砸了。 “include”是重定向。您是说example.com的SPF记录是mail.example.com的SPF记录,根据您的问题,我猜这不是您想要的。您应该在问题中包含所有相关的DNS信息(MX,A,TXT,SPF)。类似的东西:

example.com.  IN TXT "v=spf1 include:example.net -all"
example.net.  IN TXT "v=spf1 mx -all"