dmarc. Why do I receive failed SPF or DKIM authentication reports for forwarders?
I set _dmarc to see my email authentication reports (in case it fails).
like that
"v=DMARC1;p=quarantine;pct=100;rua=mailto:[email protected]"
And I receive these reports form Google.
a report I receive my emails are good, because they are comming from AWS SES and all configured fine, it comes like that
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>pass</spf>
BUT sometimes I get records like this
<record>
<row>
<source_ip>209.85.220.41</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
<selector>xxx</selector>
</dkim>
<dkim>
<domain>amazonses.com</domain>
<result>pass</result>
<selector>gggxxx</selector>
</dkim>
<spf>
<domain>gmail.com</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
And I understand that someone has forwarded my email but without overwriting headers and this someone was gmail
.
Why gmail doesn't overwrite headers and why should I care about forwarding at all? They only suppose to send me emails when it is my problem, right?
Am I confusing something?
Testing a few assumptions here:
Why gmail doesn't overwrite headers...?
Server-side / automated forwards are usually behaving this way: keeping the original sender in the header.from
and changing the envelope from
(bounce-address
) to the service forwarding the email. When an aligned DKIM
signature is present and as long as signed fields are not altered, DKIM
will successfully authenticate the message and DMARC
will pass. If no DKIM signature is found, DMARC
will fail.
They only suppose to send me emails when it is my problem, right?
No. DMARC
policy records containing a rua
tag are requesting receiving servers to periodically send an aggregate report of all email received that was sent on behalf of the domain in the header.from
field. The receiving server should not make assumptions (whose fault it is) on what is the reason for a specific check to fail (in this case misalignment of domains used in header.from
and envelope from
).