Here's a key segment of the DMARC report from Yahoo, who rejects SOME of our messages [replaced some identifying info with text in brackets]:
<feedback>
<report_metadata>
<org_name>Yahoo! Inc.</org_name>
<email>postmaster@dmarc.yahoo.com</email>
<report_id>1586827611.704931</report_id>
<date_range>
<begin>1586736000</begin>
<end>1586822399</end>
</date_range>
</report_metadata>
<policy_published>
<domain>[our_domain.com]</domain>
<adkim>r</adkim>
<aspf>r</aspf>
<p>none</p>
<pct>100</pct>
</policy_published>
<record>
<row>
<source_ip>54.240.8.126</source_ip>
<count>2</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>[our_domain.com]</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>amazonses.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>amazonses.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
<record>
<row>
<source_ip>54.240.8.200</source_ip>
<count>2</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>[our_domain.com]</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>amazonses.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>amazonses.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
Note how both of those example records show SPF fail in the Policy Evaluated block, but shows it as passing under Auth Results. I don't really have anything else to go on from Yahoo at this time, so I assume that SPF fail is the reason for the rejection. There are many more equivalent blocks that follow the same pattern.
The IP number is a valid Amazon SES IP #. DMARC and DKIM both appear to work from various online tests. None of these are bulk messages. These are individual response to users, like account validation or acknowledgement emails from specific individual user activities on our site.
Here's our SPF, with IP numbers masked: "v=spf1 mx a ip4:64.xx.xx.xx/29 ip4:70.xx.xx.xx ip4:71.xx.xx.xx ip4:71.xx.xx.xx include:amazonses.com -all"
Why are we getting the SPF Fail? How can we fix this so our messages aren't rejected by Yahoo?
Thanks.
Edit: Here are the full headers of one such rejected message (with actual email and our domain names redacted):
X-Atlas-Received: from 10.224.12.175 by atlas111.aol.mail.gq1.yahoo.com with http; Thu, 23 Apr 2020 16:14:40 +0000
X-Apparently-To: <actual_address_removed>@aol.com; Thu, 23 Apr 2020 16:14:40 +0000
Return-Path: <01000171a7d1cd9d-a4da0317-f2e3-43a7-b5bc-94eff7eaf009-000000@amazonses.com>
Authentication-Results: mta4117.aol.mail.gq1.yahoo.com;
dkim=pass (ok) header.i=@<our_company_name>.com header.s=giaoxm2ym4vikpjehhjenjnl6444uis2;
dkim=pass (ok) header.i=@amazonses.com header.s=224i4yxa5dv7c2xz3womw6peuasteono;
spf=pass smtp.mailfrom=@amazonses.com;
dmarc=pass(p=none sp=NULL dis=none) header.from=<our_company_name>.com;
Received-SPF: pass (domain of amazonses.com designates 54.240.8.53 as permitted sender)
X-YMailISG: CcEFtBoWLDvi4CGis8y3PqwppIYY9ZCAvHAOhn_bv8vPs0AV
rn0oMrrapzG0pn4qONWnjax1._lnXoOF68git1olkJyls_JSxFbzj82K5ZS_
S0rU87wPbSHakQJe.tQzvCSyixnd_KIMHz0y9QbgTDqXKM2JSoPG2fRxqpXK
HTlokY6wBJlzljm0ZngmTp1NQjpKmVr7RENfAI.EfwuwhMVwYftkHbtj5zSQ
nh04Z0qZHoTWMWPLehmzOHg_uiizixeP9JUR4O_Bp0hXDAU_BVSVeyzGDs68
hlBJ8u1JwJRI4DHJJvNh8edIIt.kDUI3Qpu6G7z_Nr4hUSFZYEzD7AsKrwuR
MEmZCSdV8Qo9jWhiUv7Zr12CZUP98wPPrdWrSgGmvC2rofbA_W5zZpbB49yk
1b0k7H8Gelt3wgN91gNEE6g6xECo1jer5pyhXTcMwi3AyRjaZ88lNO50TIRj
vfjru.DkH7LZU460ZzeqXjcnblyoortEqkgh4xiaXEQQ6i_kv6Gt3._AJV56
.oCOCSzsdBWIGBlPjb4LyfMQ8YCTQ4nzr5iJiVobpRLhOhV6EZObuetTj6M2
66mXq.8kmJv5kOIUV1fizGqNKQutLJqBRWFpB39PPeqrWkpirHYtX3apglwx
lsGMil9PCU3HI5zgFYu4Lku2XtN05Z2xoRIRU8v7wV7yZp31H8IsrLUOF2tF
MK.Bwc3.Uat81mb5xV8qFvDCWqyAXTX3y_u3_DrPv3DqwqC1kHB6ZjeBHe.j
2ot0Ea212Ut3xSpndy3hjNGGcr5fkFqhpkAaSNMTttIhMel5fNuGwYKGtEYR
XrIGb7U8O5oTmAlbframOIS6jL6oskL_d_.v37uhMd_VLufAtGmX6zsC2P71
4ZmTzEmwxjwJgkB4MTGGgZHFLLJs1rZRxXXCC1xLcPFCPtDeyUFEV6EuxUe3
EQ9ruEQWYkeslhUMTehj4sDpWbVYHae8Pchn0qe3sCWk7rmuzwrEN3WxsNXU
vNUx68D0D5icPUSYPj7ILoEmu87Z1Ej9IrGI809s6uoUfRqaPp6AT3xxY342
bR7EgBaQ_9jORY3dliPQUMdRcqs.Ru0Sda1dNIYsoOrlzgtSNeGyZvCjXWWN
mS60EjPI.7llVBg6fP3DIRkMsTk24qYC1pxabaeSQx5H0KggIKnX9FtkqT4J
GdckRkwYZjNXQvZ6XaQrx.o6rRvwTXXVUFj2SpnbJH.BnG2eaBdm8obU7X4x
UoN1Xp.0VmNzM5I00OZsF9mkVAIcCQT9598RzGhwqSyvDoEcEDgYDfoRC2A-
X-Originating-IP: [54.240.8.53]
Received: from 10.214.167.54 (EHLO a8-53.smtp-out.amazonses.com) (54.240.8.53)
by mta4117.aol.mail.gq1.yahoo.com with SMTPS; Thu, 23 Apr 2020 16:14:38 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;
s=giaoxm2ym4vikpjehhjenjnl6444uis2; d=<our_company_name>.com; t=1587658477;
h=Date:From:To:Message-ID:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding;
bh=G4gMaJmVInxsQu2V0h67izukeixOJ+yCOG+lPDbSqVA=;
b=As+UqkIhe1ukxkMdJAOHMz5d8kNTgPQhopyM/xSrzWKAQxUI7R77wqwNTypbwv3L
A3X5Ge6enmszGh4+Yk095QKEKmNEvxZTlMaauIGWiZ7b5CdDXKcXXNlZWwIoj41wE5g
q/l2KXWLr9M50g52OsfUVE2Wk5uIg6V9BynW4wPc=
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;
s=224i4yxa5dv7c2xz3womw6peuasteono; d=amazonses.com; t=1587658477;
h=Date:From:To:Message-ID:Subject:Mime-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID;
bh=G4gMaJmVInxsQu2V0h67izukeixOJ+yCOG+lPDbSqVA=;
b=AQOCZPO5Ss5EuE2RYxPgXAlhwSmRu3sT6DJMKFKZhsk6MqsFaw2sGcyO8tmNA8hH
RNUJxMn+6djrbeEeadWyRdcrtRRjv1qvzE4OWi/kUi6cizPDFuUbFogyneLcrXwR+ea
q0YOohJ5lLsXq0UAL063QYvQUozAQoGpjZLOcZBY=
Date: Thu, 23 Apr 2020 16:14:37 +0000
From: <our_company_name> <support@<our_company_name>.com>
To: <actual_address_removed>@aol.com
Message-ID: <01000171a7d1cd9d-a4da0317-f2e3-43a7-b5bc-94eff7eaf009-000000@email.amazonses.com>
Subject: Welcome to <our_company_name>!
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="--==_mimepart_5ea1beece1a63_d2b147c2f30a844718b";
charset=UTF-8
Content-Transfer-Encoding: 7bit
X-SES-Outgoing: 2020.04.23-54.240.8.53
Feedback-ID: 1.us-east-1.gvVSwkDXSEQOQySqTyuHX/jqlYce4T0W3U/naBBJjHU=:AmazonSES
Content-Length: 4609