使用 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的 CNAME,用於 DKIM; - 位於
_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 的郵件送達率頁面也指出了相同問題。請使用文字作為連結文字,或設定連結品牌,讓追蹤連結透過你自己的網域,且該網域必須與你的寄件者網域相符。
Trial 和 Essentials 方案使用共用 IP 集區。SendGrid 指出,如果你的信譽發生變化,這些 IP 可能會在不另行通知的情況下變更,因此其中一個 IP 被封鎖名單列入,就會影響該集區中的所有使用者。你之後可以使用封鎖名單檢查工具再次查詢該 IP。只有專用 IP 才能設定反向 DNS,而專用 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?
啟用 automated security 時,請檢查 s1 和 s2。停用時,selector 是 m1。如果你在設定期間選擇了自訂 selector,請改用該 selector。