<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Email on Luca's Blog</title><link>https://wlj.me/tags/email/</link><description>Recent content in Email on Luca's Blog</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Sun, 10 May 2026 11:58:47 +0800</lastBuildDate><atom:link href="https://wlj.me/tags/email/index.xml" rel="self" type="application/rss+xml"/><item><title>顺着一封 DMARC 报告，学一下邮件认证三件套</title><link>https://wlj.me/posts/dmarc-report-slax-email-audit/</link><pubDate>Sat, 09 May 2026 23:18:56 +0800</pubDate><guid>https://wlj.me/posts/dmarc-report-slax-email-audit/</guid><description>&lt;p>slax.com 的客服邮箱每天会收到几封 DMARC Aggregate Report，发件人是 &lt;code>dmarcreport@microsoft.com&lt;/code>，附件是几百字节的 zip，里面是 XML。我之前从来不开。今天问了 Nix 一下这是什么，顺着学了一遍邮件认证三件套：SPF、DKIM、DMARC。&lt;/p>
&lt;h2 id="spf">SPF&lt;/h2>
&lt;p>SPF（Sender Policy Framework）配在 DNS 里，告诉收件方&amp;quot;这些 IP 才允许替我发邮件&amp;quot;。比如域名用飞书邮箱，SPF 记录会写：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">v=spf1 +include:_netblocks.m.feishu.cn -all
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>意思是飞书的发送服务器 IP 都允许，其他一律拒绝。&lt;/p>
&lt;p>SPF 的弱点是不抗转发。客户把我的邮件转发到 Gmail 时，源 IP 变成转发服务器，原来的 SPF 检查就失败了。&lt;/p>
&lt;h2 id="dkim">DKIM&lt;/h2>
&lt;p>DKIM（DomainKeys Identified Mail）给每封外发邮件加密签名。私钥在邮件服务器那边，公钥发布在 DNS 里。收件方拿公钥验签，确认这封邮件是我发的、内容没被篡改。&lt;/p>
&lt;p>签名跟着邮件走，被转发也不掉。所以 SPF 失败的转发场景，DKIM 还能过。&lt;/p>
&lt;p>DKIM 的 selector 名因服务商而异，飞书是 &lt;code>feishu&lt;/code> 加一串时间戳，比如 &lt;code>feishu2605101150._domainkey.yourdomain.com&lt;/code>。要查 DKIM 是否配置，得知道精确的 selector 名。我一开始拿常见的 &lt;code>s1&lt;/code>、&lt;code>default&lt;/code>、&lt;code>larksuite&lt;/code> 去 dig，全部空，以为是没配。后来登录飞书后台才看到真实的 selector，DKIM 其实早就启用了。&lt;/p>
&lt;h2 id="dmarc">DMARC&lt;/h2>
&lt;p>DMARC（Domain-based Message Authentication, Reporting &amp;amp; Conformance）是上面两件的协调层。它告诉收件方&amp;quot;如果 SPF 和 DKIM 都对不上我可见的 &lt;code>From:&lt;/code> 地址，按这个策略处理（none / quarantine / reject），并把每天的统计发到这里&amp;quot;。&lt;/p></description></item></channel></rss>