8

This is incredibly frustrating. My Amazon SES e-mails are ending in Yahoo & Hotmail Spam folders, even though my SPF, SenderID, and DKIM are setup correctly. Since this particular site requires users to confirm their e-mail addresses, I'm losing over 50% of new registrations since using Amazon SES and need to resolve this urgently.

Here are my SPF and SenderID records (they include e-mail services from Google, Rackspace, and Amazon):

v=spf1 include:_spf.google.com include:emailsrvr.com include:amazonses.com ~all

spf2.0/pra include:_spf.google.com include:emailsrvr.com include:amazonses.com ~all

I host this particular domain with GoDaddy and it seems you do NOT need to use quotes (") to surround the SPF and SenderID records. (In fact, when I tried it with quotes, neither the Kitterman nor the MXtoolbox tools could find the SPF records, and when I removed the quotes, both were located by both services.)

However, even though I am using the SPF and SenderID records as recommended by Amazon themselves, I sent a test e-mail to Port25's authentication verifier service, and although DKIM passed, it seems that both the SPF and SenderID records have permerrors, and it seems those errors are on Amazon's end for having "multiple records" (the Kitterman tool fails with the same reason "Results - PermError SPF Permanent Error: Two or more type TXT spf records found."). Here are the results from Port25's service:

This message is an automatic response from Port25's authentication verifier service at verifier.port25.com.  The service allows email senders to perform a simple check of various sender authentication mechanisms.  It is provided free of charge, in the hope that it is useful to the email community.  While it is not officially supported, we welcome any feedback you may have at <verifier-feedback@port25.com>.

This message is an automatic response from Port25's authentication verifier
service at verifier.port25.com.  The service allows email senders to perform
a simple check of various sender authentication mechanisms.  It is provided
free of charge, in the hope that it is useful to the email community.  While
it is not officially supported, we welcome any feedback you may have at
<verifier-feedback@port25.com>.

Thank you for using the verifier,

The Port25 Solutions, Inc. team

==========================================================
Summary of Results
==========================================================
SPF check:          permerror
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    permerror
SpamAssassin check: ham

==========================================================
Details:
==========================================================

HELO hostname:  a192-142.smtp-out.amazonses.com
Source IP:      199.255.192.142
mail-from:      000000@amazonses.com

----------------------------------------------------------
SPF check details:
----------------------------------------------------------
Result:         permerror (multiple SPF records)
ID(s) verified: smtp.mailfrom=000000@amazonses.com
DNS record(s):
   amazonses.com. SPF (no records)
   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ~all"
   amazonses.com. 900 IN TXT "spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 ~all"
   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 54.240.0.0/18 ~all"
   amazonses.com. 900 IN TXT "spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 54.240.0.0/18 ~all"
   amazonses.com. 900 IN TXT "mailru-verification: 71asdf5de908d6ed"

----------------------------------------------------------
DomainKeys check details:
----------------------------------------------------------
Result:         neutral (message not signed)
ID(s) verified: header.From=no-reply@mysite.com
DNS record(s):

----------------------------------------------------------
DKIM check details:
----------------------------------------------------------
Result:         pass (matches From: no-reply@mysite.com)    

NOTE: DKIM checking has been performed based on the latest DKIM specs
(RFC 4871 or draft-ietf-dkim-base-10) and verification may fail for
older versions.  If you are using Port25's PowerMTA, you need to use
version 3.2r11 or later to get a compatible version of DKIM.

----------------------------------------------------------
Sender-ID check details:
----------------------------------------------------------
Result:         permerror (multiple SPF records with 'pra' scope)
ID(s) verified: header.From=no-reply@mysite.com
DNS record(s):      
   _spf.google.com. SPF (no records)
   _spf.google.com. 300 IN TXT "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 ?all"
   emailsrvr.com. SPF (no records)
   emailsrvr.com. 28800 IN TXT "v=spf1 ip4:207.97.245.0/24 ip4:207.97.227.208/28 ip4:67.192.241.0/24 ip4:98.129.184.0/23 ip4:72.4.117.0/27 ip4:72.32.49.0/24 ip4:72.32.252.0/24 ip4:72.32.253.0/24 ip4:207.97.200.40 ip4:173.203.2.0/25 ip4:173.203.6.0/23 ip4:50.57.0.0/27 ~all"
   amazonses.com. SPF (no records)
   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ~all"
   amazonses.com. 900 IN TXT "spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 ~all"
   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 54.240.0.0/18 ~all"
   amazonses.com. 900 IN TXT "spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 54.240.0.0/18 ~all"
   amazonses.com. 900 IN TXT "mailru-verification: 71asdf5de908d6ed"

----------------------------------------------------------
SpamAssassin check details:
----------------------------------------------------------
SpamAssassin v3.3.1 (2010-03-16)

Result:         ham  (-2.7 points, 5.0 required)

pts rule name              description
---- ---------------------- --------------------------------------------------
0.0 SINGLE_HEADER_2K       A single header contains 2K-3K characters
-0.7 RCVD_IN_DNSWL_LOW      RBL: Sender listed at http://www.dnswl.org/, low
                           trust
                           [199.255.192.142 listed in list.dnswl.org]
-0.0 T_RP_MATCHES_RCVD      Envelope sender domain matches handover relay
                           domain
-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%
                           [score: 0.0000]
-0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from author's
                           domain
0.1 DKIM_SIGNED            Message has a DKIM or DK signature, not necessarily valid
-0.1 DKIM_VALID             Message has at least one valid DKIM or DK signature

==========================================================
Explanation of the possible results (from RFC 5451)
==========================================================

SPF and Sender-ID Results
=========================

"none"
     No policy records were published at the sender's DNS domain.

"neutral"
     The sender's ADMD has asserted that it cannot or does not
     want to assert whether or not the sending IP address is authorized
     to send mail using the sender's DNS domain.

"pass"
     The client is authorized by the sender's ADMD to inject or
     relay mail on behalf of the sender's DNS domain.

"policy"
    The client is authorized to inject or relay mail on behalf
     of the sender's DNS domain according to the authentication
     method's algorithm, but local policy dictates that the result is
     unacceptable.

"fail"
     This client is explicitly not authorized to inject or
     relay mail using the sender's DNS domain.

"softfail"
     The sender's ADMD believes the client was not authorized
     to inject or relay mail using the sender's DNS domain, but is
     unwilling to make a strong assertion to that effect.

"temperror"
     The message could not be verified due to some error that
     is likely transient in nature, such as a temporary inability to
     retrieve a policy record from DNS.  A later attempt may produce a
     final result.

"permerror"
     The message could not be verified due to some error that
     is unrecoverable, such as a required header field being absent or
     a syntax error in a retrieved DNS TXT record.  A later attempt is
     unlikely to produce a final result.


DKIM and DomainKeys Results
===========================

"none"
     The message was not signed.

"pass"
     The message was signed, the signature or signatures were
     acceptable to the verifier, and the signature(s) passed
     verification tests.

"fail"
     The message was signed and the signature or signatures were
     acceptable to the verifier, but they failed the verification
     test(s).

"policy"
     The message was signed but the signature or signatures were
     not acceptable to the verifier.

"neutral"
     The message was signed but the signature or signatures
     contained syntax errors or were not otherwise able to be
     processed.  This result SHOULD also be used for other
     failures not covered elsewhere in this list.

"temperror"
     The message could not be verified due to some error that
     is likely transient in nature, such as a temporary inability
     to retrieve a public key.  A later attempt may produce a
     final result.

"permerror"
     The message could not be verified due to some error that
     is unrecoverable, such as a required header field being
     absent. A later attempt is unlikely to produce a final result.


==========================================================
Original Email
==========================================================

Return-Path: <000000@amazonses.com>
Received: from a192-142.smtp-out.amazonses.com (199.255.192.142) by verifier.port25.com id asdf for <check-auth2@verifier.port25.com>; Sat, 1 Sep 2012 09:24:25 -0400 (envelope-from <000000@amazonses.com>)
Authentication-Results: verifier.port25.com; spf=permerror (multiple SPF records) smtp.mailfrom=000000@amazonses.com
Authentication-Results: verifier.port25.com; domainkeys=neutral (message not signed) header.From=no-reply@mysite.com
Authentication-Results: verifier.port25.com; dkim=pass (matches From: no-reply@mysite.com) header.d=mysite.com
Authentication-Results: verifier.port25.com; sender-id=permerror (multiple SPF records with 'pra' scope) header.From=no-reply@mysite.com    
Return-Path: 000000@amazonses.com
Message-ID: <000000@email.amazonses.com>
Date: Sat, 1 Sep 2012 13:24:08 +0000
Subject: Confirm your E-mail
From: "Register@mysite.com" <no-reply@mysite.com>
To: check-auth2@verifier.port25.com
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-SES-Outgoing: 199.255.192.142

Hello testuser,

Confirm your e-mail by clicking this li=
nk:

http://mysite.com/confirmemail/aaasdf7798e

If you ar=
e having problems confirming, enter the code below.

Code: aaasdf7798e

Thanks!
The mysite.com Team

What can I do to fix this urgent issue so that my e-mails via Amazon SES pass both SPF and SenderID and end up in my Yahoo and Hotmail users' Inboxes? I've tried absolutely everything and nothing seems to work. Thanks.

ProgrammerGirl
  • 449
  • 1
  • 4
  • 8

1 Answers1

3

This tool is correct, a domain is only allowed to have one TXT/SPF record.
There is no way to fix this correctly for you, you need to contact Amazon to fix their records.

These need to be merged (and similar for the v=spf2):

   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ~all"  
   amazonses.com. 900 IN TXT "v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 54.240.0.0/18 ~all"  

Note that the 54.240.0.0/18 part is also wrong, should be ip4:54.240.0.0/18.

You can of course remove your include:amazonses.com and add the IP ranges manually.
But if those ranges change, it will fail again.

faker
  • 17,326
  • 2
  • 60
  • 69
  • Thanks for confirming my suspicions that the problem is on Amazon's end. Two quick questions: 1) If a domain is only allowed to have one TXT/SPF record, then how can it have both a standard SPF record and a SenderID? 2) How can I add the IP ranges manually to both the SPF and SenderID until Amazon fixes this? Thanks! – ProgrammerGirl Sep 03 '12 at 16:25
  • 1
    1) those count as different ones, only 1 `v=spf1` and 1 `v=spf2` allowed 2) remove your `include:amazonses.com` add `ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18` (note the added `ip4:` for the last network, which is also missing in the published records – faker Sep 03 '12 at 16:48
  • Thanks. I noticed that you use `v=spf2` for SenderID, yet it seems everyone else uses `spf2.0/pra` to start the SenderID record. What's the difference, which one should I use, and how would the start of the SenderID record look then? Thanks again, I greatly appreciate it. – ProgrammerGirl Sep 03 '12 at 16:54
  • 1
    Sorry, you are correct, `v=spf2` doesn't exist, `spf2.0/pra` is correct – faker Sep 03 '12 at 17:03
  • No problem, thanks for the clarification. So just to be clear, the two records I would need are (SPF) `v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 ~all` and (SenderID) `spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 ~all`, is that correct? Please confirm, and thanks once again. – ProgrammerGirl Sep 03 '12 at 17:06
  • 1
    well no, you probably want to keep the includes of your other providers, so: `v=spf1 ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 include:_spf.google.com include:emailsrvr.com ~all` and `spf2.0/pra ip4:199.255.192.0/22 ip4:199.127.232.0/22 ip4:54.240.0.0/18 include:_spf.google.com include:emailsrvr.com ~all` – faker Sep 03 '12 at 17:13
  • Sorry, you are correct, I forgot about those! Thanks for all your help, faker, I really appreciate it. Now it's time to deal with Amazon...they have a lot of explaining to do. – ProgrammerGirl Sep 03 '12 at 17:15