在 Single Sends 中创建的简报和通过 /v3/mail/send 发送的密码重置邮件,即使来自同一个 SendGrid 账户,最终收到的邮件也可能有明显差异,这会影响垃圾邮件测试。Marketing Campaigns 始终会尝试添加退订标头,而 API 只会在你明确要求时添加。因此,在发送前要先确定你测试的是哪一种邮件。
两种邮件的接收方式相同。Email Spam Tester 会为你提供一个临时地址,无需账户。一小时内只有第一封到达的邮件会被检测,并生成报告,涵盖身份验证、SpamAssassin 和 Rspamd 判定、邮件内容、Gmail 和 Yahoo 制定的批量发件人规则,以及使用你的发送 IP 查询的 21 个黑名单。
Single Sends:测试按钮及其前缀
内置测试位于 Marketing > Single Sends。打开 Single Send,找到 Test Your Email,输入测试地址,然后点击 Send Test Message。SendGrid 要求先填写发件人和主题,才能进行测试。如果主题中包含 Handlebars,还需要填写 Test Data。发送时,SendGrid 会在主题行前添加 Test - 。
正式测试时,请将 Single Send 发送到一个列表。Single Sends 会发送给列表或细分受众,因此请创建一个仅包含测试地址的列表,并在 Recipients 下选择该列表。这样,邮件标头、退订链接和跟踪链接就会与订阅者实际收到的内容一致。如果你还进行了收件箱测试,也可以将其提供商收件箱加入该列表。
API 和 SMTP:一条 curl 命令
以下内容精简自 SendGrid 的入门示例,并将测试地址设为收件人:
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer <<YOUR_API_KEY>>' \
--header 'Content-Type: application/json' \
--data '{"personalizations":[{"to":[{"email":"test-xxxxxxxxxxxxxxxxxxxx@t.email-spam-tester.com"}],"subject":"Hello, World!"}],"content":[{"type":"text/plain","value":"Heya!"}],"from":{"email":"you@yourdomain.com","name":"Your Name"}}'
启用收件箱测试后,提供商收件箱地址会加入同一个 to 数组,标记则会加入 subject。这样,一次请求也能告诉你 Gmail、Outlook、Yahoo 和其他提供商将邮件放入哪个文件夹。
填入你自己的测试地址,并使用已通过 SendGrid 单一发件人验证或域名身份验证的发件人地址。更好的做法是发送你的应用实际发送的邮件,并使用真实的 HTML,因为内容检查会根据邮件正文进行评分。
如果你的应用通过 SMTP 通信,除传输方式外没有任何变化。主机是 smtp.sendgrid.net,用户名就是字符串 apikey(不是你的密钥),SSL 使用 465 端口。
此外还有一个测试发送端点 POST /v3/marketing/test/send_email。它最多接受 10 个地址,但仅适用于 Dynamic Transactional Templates,因此对于大多数 API 邮件,上面的普通 Mail Send 调用才是真实有效的测试。
退订标头取决于你选择的发送方式
Marketing Campaigns 每次都会尝试添加 List-Unsubscribe 标头。通过 API 或 SMTP 发送的邮件,只有在 Settings > Tracking 中启用 Subscription Tracking 后才会获得这些标头。在这种情况下,SendGrid 会插入带 HTTPS 链接的 List-Unsubscribe,以及 List-Unsubscribe-Post: List-Unsubscribe=One-Click。
如果未启用 Subscription Tracking,你需要在请求中自行添加标头:
"headers": {
"List-Unsubscribe-Post": "List-Unsubscribe=One-Click",
"List-Unsubscribe": "<mailto:unsubscribe@yourdomain.com>, <https://yourdomain.com/unsubscribe>"
}
SendGrid 要求同时提供 mailto 和 https 部分,并警告不要在用户对该链接发起普通 GET 请求时执行退订。复制 SendGrid 支持文章中有关这些标头的内容时要小心。文章的第二个示例把 List-Unsubscribe-Post 设置为 URL,这是错误的。它的值始终是 List-Unsubscribe=One-Click。其余内容请参阅我们的 List-Unsubscribe 修复页面。
如果邮件是密码重置邮件或收据,并且没有任何邮件列表标头,报告会将群发邮件发件人规则组标记为已跳过,而不是判定为失败。通过 API 发送的简报不会获得这种处理。
阅读身份验证结果
如果账户未配置域名身份验证,收件人会在你的发件人地址后看到 "via sendgrid.net",SendGrid 文档说明,配置域名身份验证后会移除该标记。报告提供的信息不止这个标记。请查看 DKIM 和 SPF 对齐结果。如果签名或 Return-Path 属于 SendGrid 域名而不是你的域名,DMARC 就无法针对你的发件人地址通过验证,此时修复方案应引导你配置域名身份验证。使用 gmail.com 或 yahoo.com 地址作为发件人地址会更糟。SendGrid 的 DMARC 页面说明,这两种情况下 SPF 和 DKIM 都会失败,控制台本身也会警告,这类邮件可能无法通过 DMARC 检查。
域名身份验证位于 Settings > Sender Authentication。启用自动安全设置时,也就是默认设置,SendGrid 会提供四条记录:
em[0000]上的一条 CNAME,用于 SPF,并会成为你的 Return-Path;s1._domainkey和s2._domainkey上用于 DKIM 的 CNAME;_dmarc上的一条 TXT,值为v=DMARC1; p=none;。
这些是示例值。请从你的账户中复制实际值。
| 名称 | 类型 | 值 | 用途 | 复制 |
|---|---|---|---|---|
| 启用自动安全设置(默认) | ||||
| em[0000] | CNAME | 账户中提供的目标 | SPF 和 Return-Path。 | |
| s1. | CNAME | 账户中提供的目标 | DKIM。 | |
| s2. | CNAME | 账户中提供的目标 | DKIM,第二个选择器。 | |
| _dmarc | TXT | v= | DMARC。 | |
| 关闭自动安全设置 | ||||
| em[0000] | MX | 账户中提供的主机 | Return-Path。 | |
| em[0000] | TXT | v= | SPF,需要你自行维护。 | |
| m1. | TXT | 账户中提供的密钥 | DKIM。 | |
关闭自动安全设置后,你会在 em[0000] 上获得一条 MX 和一条 SPF TXT(v=spf1 include:sendgrid.net ~all),并在 m1._domainkey 上获得一条 DKIM TXT,同时需要自行维护 SPF 记录。如果你的 DNS 提供商拒绝包含 _ 的 CNAME 名称,这是唯一的选择。如果其他服务已在使用选择器 s,SendGrid 允许你选择自定义选择器。使用 DKIM 检查工具(选择器 s1)和 SPF 检查工具检查结果。如果你的 SPF 记录内容越来越多,后者还会统计 DNS 查询次数。
链接、IP 和报告的其余部分
点击跟踪会重写每个链接。如果链接文本本身是 URL,显示的地址就会与实际目标不一致,报告中的链接不匹配检查会将其标记出来。SendGrid 的邮件送达率页面也指出了同一问题。使用文字作为链接文本,或者设置链接品牌,使跟踪链接通过你自己的域名跳转,该域名必须与你的 From 域名匹配。
Trial 和 Essentials 套餐使用共享 IP 池。SendGrid 指出,如果你的信誉发生变化,使用的 IP 池可能会在不另行通知的情况下改变,因此其中一个 IP 被列入阻止列表会影响该池中的所有用户。你可以稍后使用阻止列表检查工具再次查询该 IP。反向 DNS 只能使用专用 IP 进行配置,专用 IP 包含在 Pro Email API 和 Advanced Marketing Campaigns 中。
SendGrid 文档中的延伸阅读
邮件测试www.twilio.com ↗域名认证www.twilio.com ↗List-Unsubscribewww.twilio.com ↗链接品牌www.twilio.com ↗常见问题
为什么我的邮件会显示 "via sendgrid.net"?
SendGrid 尚未验证你的发件域名。请在 Settings > Sender Authentication 中设置域名验证。根据 SendGrid 的文档,设置完成后,该标记就会消失。
报告显示缺少 List-Unsubscribe,但我使用的是 SendGrid。为什么?
你可能通过 API 或 SMTP 发送邮件,并且关闭了 Subscription Tracking。你可以在 Settings > Tracking 中启用它,也可以自行在 headers 对象中添加这两个标头。
我可以使用 SendGrid 的 "Send Test Message" 进行测试吗?
可以,邮件会发送到测试地址。但请注意,收到的邮件主题前会带有 Test - 。如果需要检查订阅者实际收到的邮件标头,向仅包含一个联系人的列表发送 Single Send 会更接近真实情况。
我可以使用测试发送 API 端点,而不是 Mail Send 吗?
只能用于 Dynamic Transactional Templates,因为 /v3/marketing/test/send_email 只接受此类模板。它最多支持 10 个地址。其他所有邮件都通过 /v3/mail/send 发送。
我应该在 DKIM 检查工具中输入哪个 selector?
如果启用了自动安全设置,请检查 s1 和 s2。如果未启用,selector 是 m1。如果你在设置过程中选择了自定义 selector,请改用该值。