流程
五个步骤,代理会自行执行全部步骤,无需逐步引导。
获取地址
一次调用即可预留一个一次性地址,并告诉代理应使用哪种语言编写修复计划。该地址仅接收一封邮件,并在一小时后过期。
向该地址发送真实邮件
不是摘要,也不是缩短版。一半的检查会读取发送平台添加的邮件头,而粘贴的正文不包含这些邮件头。
等待
一次阻塞调用。分析完成后它才会返回,因此代理无需轮询,也不会写错休眠循环。
修复它指出的问题
每项发现都附有作为依据的 RFC 章节和 Google 文档页面,因此代理可以核查该结论,而不是直接相信它。
再次发送
一个新地址、修正后的邮件,以及用于与首次评分比较的第二次评分。预期提升通过重新评分计算,但它们不能叠加,第二份报告才是如实的结果。
接入
MCP 服务器只需在 Claude Code 中添加一行:
claude mcp add --transport http email-spam-tester https://email-spam-tester.com/mcp
或者,对于接受 JSON 的客户端:
{
"mcpServers": {
"email-spam-tester": {
"type": "http",
"url": "https://email-spam-tester.com/mcp"
}
}
}
它随附四个工具:预留地址、等待报告、通过报告的 slug 读取现有报告,以及获取与实际投递内容完全一致的邮件源文。
技能文件
MCP 为代理提供工具。此文件为代理提供判断方法:何时使用这些工具、如何区分 skip 状态与 pass 状态,以及哪些发现属于必须由用户修改的 DNS 记录,而不是代理可以编辑的文本。将它放入指定位置,代理就不会再询问。
将其保存为 .claude/skills/mail-vet/SKILL.md,或者粘贴到客户端中具有相同用途的位置。
不使用代理
两个请求,无需密钥。第一个请求预留地址,第二个请求读取报告:尚未收到邮件时返回 202,收到邮件后返回包含全部内容的 200。
# reserve a single-use address curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en&utm_source=agent' # {"address":"test-<slug>@email-spam-tester.com","slug":"<slug>",...} # send the message there, then read it back curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>' # 202 while nothing has arrived, 200 with the report once it has
响应中包含 report_url,这是供用户阅读的页面。应当提供该页面,而不是一大段 JSON。
阅读报告
两个数字,它们并不是对同一件事的两种看法。
收件箱评分,0 到 100
我们的模型。身份验证和基础设施占据大部分权重,因为它们在过滤器读取邮件正文之前就决定了投递结果。
经典评分,0 到 10
复现人们已经习惯用来比较的 SpamAssassin 风格分数。保留此分数是为了让报告能与用户在其他地方看到的结果进行比较,而不是因为它的衡量效果更好。
检查结果分为通过、警告、失败、跳过或错误。跳过并不代表通过:它表示该检查不适用,例如没有附件可扫描或没有 HTML 部分可评估。错误表示我们无法确定结果,应当明确说明这一点,而不是当作已经确定并进行评分。
草稿无法修复的问题
有些发现与 DNS 有关,而不是内容问题,代理应当直接说明这一点,而不是不断编辑邮件直到分数发生变化:
- SPF、DKIM 和 DMARC 记录,以及它们是否与 From 域名一致
- 发送 IP 的反向 DNS,以及是否通过正向确认
- MX 记录、发送主机上的 TLS 以及阻止列表条目
- MTA-STS、TLS 报告、DNSSEC 和 BIMI
其余都是草稿本身:主题、预览文本、HTML 大小、纯文本部分、图片替代文本、短链接服务、退订邮件头。
值得教给它的四个习惯
测试你实际要发送的内容
改写后的样本衡量的是该样本。
从平台发送,而不是从你自己的客户端发送
从个人账户测试 Mailchimp 营销活动,衡量的是该账户。
修复后重新测试
各项修复会相互影响。只有第二份报告中的数值考虑到了这一点。
未经允许,不要测试他人的邮件
任何持有链接的人都可以在报告中看到主题、发件人、退信地址和完整邮件源代码。