如何從你的應用程式寄送電子郵件(並確保進入收件匣)
要讓應用程式的郵件穩定送達,請使用郵件寄送服務商,而不是自己的信箱;從你自有網域的地址寄信;並新增服務商提供的 DNS 紀錄,讓 SPF、DKIM 與 DMARC 全部通過驗證。請將交易型郵件(密碼重設、收據、確認信)與行銷郵件分開,且每種郵件只寄給預期會收到的人,同時處理退信與取消訂閱。請先把身分驗證做對,這是應用程式郵件被丟進垃圾郵件最常見的原因。
交易型郵件與行銷郵件
這兩種郵件在程式碼裡看起來很像,但收件匣服務商與法律對它們的處理方式差異很大。
| 交易型郵件 | 行銷郵件(大量寄送) | |
|---|---|---|
| 觸發方式 | 使用者的某個操作 | 你的排程或行銷活動 |
| 範例 | 註冊確認、密碼重設、魔術連結、收據、預約提醒、「有人回覆了你」 | 電子報、產品公告、促銷活動、重新喚回用戶 |
| 收件對象 | 一次一人 | 一次許多人 |
| 同意基礎 | 由使用者的操作隱含同意 | 需要許可,並提供容易取消訂閱的方式 |
| 時效要求 | 必須在數秒內送達 | 數分鐘內送達即可 |
| 寄送方式 | 從你的應用程式透過 API 寄出 | 電子報工具或服務商的群發功能 |
請將兩者分開。如果某個行銷活動收到大量檢舉,你不會希望同一個串流中的密碼重設郵件跟著受影響。常見做法是使用不同的子網域,例如用 mail.example.com 寄送帳號相關郵件,用 news.example.com 寄送電子報;部分服務商也會在內部將兩者分開。例如 Postmark 表示,截至 2026 年 9 月,其交易型與廣播型「訊息串流」運行於各自獨立的寄送基礎設施上。
選擇服務商
你的應用程式不應從自己的伺服器直接寄信。寄送服務商會處理基礎設施、IP 信譽、重試與退信處理。知名的選項包括 Postmark、Resend、SendGrid、Amazon SES 與 Mailgun;它們都提供 HTTP API 與 SMTP 存取。價格與方案都會變動,請到各家官網自行比較。
比較時可以注意:
- **專長。**有些服務商專注於交易型郵件,有些則同時提供交易型與行銷型郵件。
- **開發者體驗。**API 清楚、有適用於你所用語言的官方函式庫,並且有實用的紀錄,能看出每封郵件是否已送達、退信或被標為垃圾郵件。
- Webhook:接收退信、檢舉與送達事件,讓你的應用程式能即時反應。
- 範本:可以儲存在服務商後台,也可以放在你自己的程式碼中。放在程式碼裡,範本就能做版本控管並進行測試。
- 地區與資料處理:如果你對資料的處理地點有要求。
- 你的寄送量下的成本,包括超出免費額度後的費用。
若是寄給名單的電子報,專門的電子報或電子郵件行銷工具,通常比在應用程式中自行開發行銷功能更適合。
設定寄件網域
請從自己的網域寄信,例如 hello@example.com,而不是 Gmail 或 Outlook 信箱。透過第三方服務以免費信箱地址寄信,會無法通過身分驗證檢查,也很可能被過濾。
可以考慮專門用於寄信的子網域。例如 Resend 建議(截至 2026 年 9 月)從 updates.example.com 這類子網域寄信,以隔離寄送信譽,也能讓郵件相關的 DNS 紀錄與你的主網站分開。
接著,服務商會提供你要新增的 DNS 紀錄,請到你的網域 DNS 管理處新增。如果你對 DNS 還不熟悉,請先閱讀網域與 DNS 的運作方式,了解各種紀錄。
SPF
SPF(Sender Policy Framework,寄件者政策框架)是一筆 TXT 紀錄,列出哪些伺服器可以代表你的網域寄信。收件端會檢查寄信伺服器是否在名單內。
- 每個網域只應有一筆 SPF 紀錄。新增服務商時,請把它合併到既有紀錄中,而不是新增第二筆。
- 評估 SPF 時最多只允許 10 次 DNS 查詢;若
include:串接過長,可能超過上限而導致失敗。 - 許多服務商會要求你建立一個回退路徑(return-path)子網域,並在該子網域設定 SPF,因此你可能完全不需要修改主要的 SPF 紀錄。
DKIM
DKIM(DomainKeys Identified Mail)會為每封郵件加上加密簽章。服務商使用私密金鑰簽署,而你則把對應的公開金鑰發布為 DNS 紀錄(依服務商不同,可能是 TXT 或 CNAME)。收件端會檢查簽章,以確認郵件確實來自授權的寄件者,且在傳送途中未被竄改。
服務商的「驗證網域」步驟主要就是在處理 DKIM,請不要跳過。
DMARC
DMARC 會把前兩者串在一起。它是位於 _dmarc.yourdomain.com 的 TXT 紀錄,用來告訴收件端:
- **對齊(Alignment):**信件上顯示的寄件網域,必須與通過 SPF 或 DKIM 驗證的網域一致。
- **政策(Policy):**對驗證失敗的郵件該怎麼處理,可以是
p=none(僅回報)、p=quarantine(視為可疑,通常會進垃圾郵件匣)或p=reject(直接拒收)。 - **報告(Reports):**彙總報告要寄到哪個地址(
rua=),讓你看見有哪些寄件者以你的網域名義寄信。
比較穩妥的做法是:先以 p=none 加上回報地址開始,確認正常的郵件都能通過驗證,再改為 quarantine,最後改為 reject。嚴格的政策也能讓他人更難偽冒你的網域。
Gmail 的要求
截至 2026 年 9 月,Google 的寄件者指南規定:
- 所有寄件者寄往個人 Gmail 帳號時,都需要 SPF 或 DKIM、寄信伺服器有效的正向與反向 DNS 解析、TLS 加密,並且在 Postmaster Tools 中的垃圾郵件率低於 0.3%。
- 大量寄件者(每天寄往 Gmail 超過 5,000 封)需要同時具備 SPF 與 DKIM、一筆 DMARC 紀錄(允許使用
p=none政策)、寄件網域對齊,並在行銷郵件與訂閱郵件中提供一鍵取消訂閱,以及可見的取消訂閱連結。
服務商會處理伺服器端的部分,但 DNS 紀錄與取消訂閱的處理則需要你自己完成。即使你每天的寄送量遠低於 5,000 封,符合大量寄件的規範也是最簡單的安全做法。
把寄信功能建置進應用程式
網域驗證完成後:
- 將 API 金鑰儲存為伺服器端的機密資訊,切勿放在前端程式碼中。請參閱什麼是環境變數與機密資訊。
- 從伺服器寄信,並在觸發郵件的操作成功之後才寄出。
- **不要讓使用者等待郵件寄送。**除了最簡單的應用程式,都應將寄信工作排入佇列,並在暫時性失敗時重試,避免服務商回應變慢而拖累註冊流程。
- 記錄寄送結果,包括服務商的郵件 ID 與狀態;不要記錄金鑰,也不要記錄包含個人資料的完整郵件內容。
- 處理退信與檢舉的 Webhook:停止寄信給硬退信的地址,或曾將你的郵件標為垃圾郵件的地址。
一則涵蓋基本內容的提示詞範例:
使用伺服器機密 [ENV_NAME],透過 [PROVIDER] 寄送交易型郵件,寄件者為「Acme hello@mail.acme.com」。使用者註冊後寄出歡迎信,預約儲存後寄出預約確認信。範本請保存在程式碼中,並同時提供純文字與 HTML 版本。寄信工作請排入佇列,暫時性失敗最多重試三次。失敗時記錄服務商回傳的錯誤,但絕不記錄 API 金鑰。新增一個 Webhook 端點,在發生硬退信或檢舉時將地址標記為無法投遞,並在之後的寄送中略過這些地址。
帳號相關郵件(驗證連結、魔術連結與密碼重設)也屬於登入流程的一部分。如何為應用程式加入登入功能說明了這些流程如何銜接;請確保這些連結只能使用一次,且有效期限很短。
送達率的良好習慣
身分驗證讓郵件有機會被考慮,而日常的寄信行為則決定它能否留在收件匣。
- **只寄出人們預期會收到的郵件。**確認過的註冊、行銷郵件需明確同意加入,不要使用購買的名單。
- **讓取消訂閱變得容易。**對於非純交易型的郵件,請提供簡單的取消方式,並立即執行。
- **為新網域逐步暖身。**全新網域在第一天就寄出數千封郵件,看起來很可疑。請先從交易型郵件開始,再逐步提高寄送量。
- **保持名單乾淨。**立即移除硬退信的地址;對於長時間沒有開啟任何郵件的人,也可以考慮移除。
- **寫得像真人。**主旨清楚、寄件者名稱容易辨識、附上純文字版本、圖片與連結不要太多,並使用你自己網域的連結。避免使用短網址服務。
- **持續監控。**在 Google Postmaster Tools 中註冊你的網域,並不定期查看 DMARC 報告。
- **使用真正會被閱讀的回覆地址。**回覆是很好的正面訊號,也能提供有用的回饋。
測試時不打擾任何人
- 如果服務商提供測試模式或沙盒環境,請使用它;或寄給你自己擁有的地址。
- 在開發階段,請寄到接收所有郵件的測試信箱,而不是真實用戶;內含大量看似真實地址的種子資料庫,很容易不小心寄信給陌生人。
- 在幾種郵件用戶端中檢查每個範本,例如網頁版 Gmail、手機的郵件應用程式、Outlook,並檢查深色模式。
- 查看測試郵件的標頭資訊:它會顯示 SPF、DKIM 與 DMARC 是否通過驗證。
法律基本概念
各國規定不同。概括來說,許多地區的行銷郵件都需要同意,必須標明寄件者,並提供有效的取消訂閱方式;交易型郵件的規範較不相同,但也不應藉此夾帶行銷內容。如果你透過候補名單頁面收集地址,請說明你會寄送什麼內容、何時寄送,以及每位使用者何時、如何註冊,並說明你會如何保存這些資料。若有疑問,請查閱你的用戶所在地的規定。
郵件檢核清單
- 已選定寄送服務商,且 API 金鑰已儲存為伺服器機密資訊
- 從你自己的網域或子網域寄信,而非免費信箱
- 已新增 SPF、DKIM 與 DMARC 紀錄,且全數通過驗證
- 交易型郵件與行銷郵件已分開
- 寄信工作已排入佇列並重試,寄送結果已記錄
- 已處理退信與檢舉的 Webhook
- 非交易型郵件提供取消訂閱,並立即生效
- 範本已在數種用戶端中測試,測試郵件絕不會寄給真實用戶
從 Mythex 應用程式寄送郵件
Mythex 不提供內建的郵件寄送服務給你建置的應用程式,因此你需要自行選用服務商,例如 Resend、SendGrid 或 Postmark。請將其 API 金鑰儲存為專案機密資訊(代理程式可以在聊天中透過機密資訊卡片請你提供),再用一般語言說明你需要的郵件。說明文件中有一則起始提示詞,見從應用程式寄送郵件。若你在 Pro 方案中透過 Mythex 購買網域,可以在網域的 DNS 設定中新增服務商提供的 TXT 與 CNAME 紀錄;請參閱自訂網域。
常見問題
交易型郵件與行銷郵件有什麼差別?
交易型郵件是由使用者的某個操作觸發,且是使用者預期會收到的,例如密碼重設、收據或預約確認。行銷郵件則是依你的排程寄給許多人,例如電子報與公告。兩者的同意規則不同,最好分開從不同的發送串流或子網域寄出。
為什麼我的應用程式郵件會被丟進垃圾郵件?
常見原因包括:寄件網域未設定 SPF、DKIM 與 DMARC;透過第三方服務以 Gmail 等免費信箱寄信;全新網域沒有信譽;或內容與連結看起來像垃圾郵件。請先修正身分驗證,再檢查內容與寄送量。
我可以用自己的 Gmail 帳號寄應用程式郵件嗎?
也許可以用來寄幾封個人測試郵件,但不適合用於正式的應用程式。請使用具備自有網域的郵件寄送服務商,設定它提供的 DNS 紀錄,並從該網域的地址寄信。
我需要 DMARC 嗎?
實際上需要。截至 2026 年 9 月,Google 要求每天向 Gmail 地址寄送超過 5,000 封郵件的寄件者設定 DMARC;而 DMARC 紀錄也能防止你的網域遭到偽冒。在檢視報告的同時,先以 p=none 政策開始即可。