結論先講

會員收不到系統信,九成不是程式 bug,而是寄件網域的「信任」沒建立好。最常見的隱形原因是還在用寄信服務的沙箱/測試網域(如 .dev),它通常只寄得到你自己、寄給其他人會被靜默攔下,日誌卻仍顯示成功。修法是改用你自己擁有並完成驗證的正式子網域(如 send. 開頭),設好 SPF、DKIM、DMARC,並從寄信服務後台讀每封信的真實送達狀態,而不是翻應用程式碼。

你的程式碼回傳 200 OK,後台日誌寫著「信件已送出」,但會員就是收不到驗證信、收不到重設密碼信、收不到訂單通知。客服信箱開始累積「我沒收到信」的客訴,你開始懷疑是不是哪一行程式寫錯了。我可以很直接地告訴你:九成的情況下,這不是程式 bug,而是寄件網域的「信任」沒有建立好。系統信送達率(deliverability)是一門完全獨立於應用程式邏輯之外的工程,而我們在自己的平台上,幾乎把每一個坑都踩過一輪。這篇文章就是我把這些教訓攤開來講。

本文重點

  1. 為什麼 200 OK 卻收不到信
  2. 沙箱寄件網域的隱形陷阱
  3. SPF、DKIM、DMARC 各自負責什麼?
  4. 為什麼系統信要用獨立子網域寄?
  5. 什麼是網域聲譽與暖機?
  6. 內容與互動會影響送達率嗎?
  7. 收不到信的診斷清單
  8. 送達率是信任工程的一環

為什麼 200 OK 卻收不到信

第一個要打破的迷思,是把「寄件 API 回傳成功」誤當成「使用者收到信」。這兩件事之間,隔著至少四道完全不受你程式碼控制的關卡。

當你呼叫 Resend、SendGrid、SES 或任何寄信服務的 API,得到一個 200 或一個 message ID,這只代表一件事:你的請求被寄件服務接受了。信件接下來會排隊、交給寄件服務的 MTA(郵件傳輸代理)、由它連線到收件方的伺服器(Gmail、Outlook、企業自架 mail server)、收件方做反垃圾與信任判斷、最後才決定要放進收件匣、垃圾桶,或是直接靜默丟棄。

關鍵在於:收件方的判斷發生在你的日誌之後。你的系統永遠看不到「Gmail 把這封信歸類為垃圾郵件」這件事,除非你主動去讀寄件服務回報的 bounce 與 complaint 事件。所以當客服收到「我沒收到信」的回報、而你的日誌一片綠燈時,請先假設問題出在送達層,而不是去翻你的應用程式碼。

我們在自己的平台上第一次遇到這件事的時候,也走了冤枉路——先去檢查呼叫寄信的那段邏輯有沒有寫錯、參數有沒有帶對、模板有沒有渲染失敗。全都正常。真正的兇手,是寄件網域本身。

為什麼信寄得出去、日誌也成功,會員卻收不到?沙箱寄件網域的隱形陷阱

這是我最想優先警告所有正在用寄信服務的人的一個坑,因為它「看起來完全正常」,卻會讓你的會員系統性地收不到信。

幾乎每一家寄信服務,都會給你一個「沙箱」或「測試」用的寄件網域,方便你在還沒設定自己的網域時就能跑通流程。以我們用的服務來說,那個沙箱寄件位址長得像 onboarding@resend.dev 這種樣子。它寄得出去、API 回 200、你自己測試時也收得到信——於是你以為一切就緒,上線了。

問題是:這類沙箱網域通常只允許寄信給「你自己的帳號」,寄給其他任何人都會被靜默攔下。你在開發時用自己的信箱測,當然每次都收得到,於是這個限制完全藏在你的視線之外。等到真實會員註冊、要收驗證信時,信根本送不出去,而你的日誌依然顯示成功。

我們在自己的平台上實際遇到的,正是這個情境:會員靜默收不到系統信,後端卻毫無錯誤。修法也很明確——把寄件網域從沙箱的 .dev 測試域,換成我們自己擁有、且完成驗證的正式子網域(我們用的是 send. 開頭的子網域)。換完之後,信才真正開始送進一般收件人的信箱。

如果你現在的系統還在用寄信服務預設的 .devsandbox 寄件位址,請立刻停下來檢查——這很可能就是你的會員收不到信的唯一原因,而它不會在任何日誌裡留下痕跡。

另一個藏在沙箱背後的限制是「網域額度」。許多寄信服務的免費方案只允許驗證一個寄件網域。我們在做多語系站點時就撞到這件事:英文站想用獨立的寄件網域,但免費額度已經被主網域用掉了,於是只能先讓英文站的系統信暫時共用同一個已驗證的網域,等之後再決定要不要升級付費方案換取第二個網域名額。這不是技術問題,是方案額度問題——但如果你沒意識到,就會在「為什麼新站寄不出信」上卡很久。

SPF、DKIM、DMARC 各自負責什麼?寄件信任的三根柱子

要讓收件伺服器相信「這封信真的是從這個網域寄出的、而且沒被竄改」,你需要在 DNS 設定三組記錄。它們是現代寄件信任的地基,缺一不可。

SPF:誰有資格用我的網域寄信

SPF(Sender Policy Framework)是一條 DNS TXT 記錄,列出「哪些伺服器有權代表我的網域寄信」。當 Gmail 收到一封聲稱來自 truelink-group.com 的信,它會去查這個網域的 SPF 記錄,看看實際寄出這封信的伺服器 IP 在不在許可名單裡。在名單裡,這封信就通過 SPF 檢查;不在,就是一個負面信號。

當你用第三方寄信服務時,你需要把該服務的寄件主機納入你的 SPF。常見的陷阱是 SPF 記錄的「DNS 查詢次數上限為 10 次」——如果你串了太多服務、各自用 include: 疊加,很容易超過上限導致整條 SPF 失效。

DKIM:信沒有被竄改的數位簽章

DKIM(DomainKeys Identified Mail)是用一對公私鑰,對每一封寄出的信做數位簽章。私鑰由寄信服務保管、用來簽信;公鑰你發佈在 DNS 裡。收件方用公鑰驗證簽章,確認這封信在傳輸途中沒有被竄改、而且確實由授權方簽出。設定方式通常是寄信服務給你一段 CNAME 或 TXT 記錄,貼進你的 DNS 即可。

DMARC:當 SPF/DKIM 失敗時該怎麼辦

DMARC(Domain-based Message Authentication, Reporting & Conformance)是上層政策。它告訴收件方:「如果一封冒用我網域的信沒通過 SPF 和 DKIM,你該怎麼處理?」——是放行(p=none,只觀察)、丟進垃圾桶(p=quarantine),還是直接拒收(p=reject)。DMARC 還能要求收件方把驗證報告回傳給你,讓你看見有誰在冒用你的網域寄信。

三者的關係是:SPF 和 DKIM 負責「證明這封信是真的」,DMARC 負責「定義假信該怎麼處置、並回報狀況」。對 SME 來說,建議從 p=none 開始觀察一段時間,確認自己所有合法的寄信來源都通過驗證後,再逐步收緊到 quarantinereject。一上來就 reject 而漏設了某個合法寄件來源,會把自己的正常信也擋掉。

為什麼系統信要用獨立子網域寄,而不是用主網域?

一個我認為被嚴重低估的最佳實務:不要用你的主網域直接寄系統信,而是用一個專屬的子網域。我們在自己平台上的做法,就是用 send.truelink-group.com 這樣的子網域來寄交易型系統信。

為什麼要分離?因為「網域聲譽」是會被牽連的。如果你用主網域(也就是員工日常收發、業務往來、行銷電子報全都混在一起的那個網域)去寄大量系統信,一旦其中某類信件觸發了大量的垃圾郵件檢舉或退信,整個主網域的聲譽都會受損——連你的業務同事寄給客戶的一對一信件都可能跟著進垃圾桶。

把系統信隔離到專屬子網域,好處有三個:

子網域同樣需要各自完成 SPF、DKIM、DMARC 的設定與驗證。在多語系或多品牌的情境下,這件事會變得更複雜——這也是前面提到的「免費方案網域額度」會卡住你的地方。

不確定自己的寄件網域信任設定對不對?

SPF 查詢次數爆掉、DKIM 沒簽到、DMARC 政策過鬆或過嚴,這些都不會在程式日誌裡報錯,卻會讓你的會員系統性地收不到信。如果你想要一份針對自己網域與寄信架構的具體診斷,我們可以一起把它攤開來看。

預約信任工程諮詢 直接聯絡我們

什麼是網域聲譽與暖機?為什麼新網域不能一次爆量寄信?

收件伺服器對寄件網域與寄件 IP 都維持一份「聲譽分數」,這份分數會隨著你的寄信行為持續變動。一個全新的網域或 IP,聲譽是中性偏謹慎的——收件方不認識你,所以會用比較保守的態度對待你的信。

這就帶出「暖機(warm-up)」的概念。如果你的網域過去沒怎麼寄過信,然後某天突然爆量寄出幾千封系統信,這個流量模式本身就很像垃圾郵件發送者的行為,很容易觸發過濾。比較安全的做法是讓寄信量逐步爬升,給收件方時間建立「這是一個正常、穩定的寄件者」的印象。

對大多數 SME 來說,系統信的量通常是隨著真實業務自然成長的,所以這件事不一定需要刻意操作。但有兩個情境要特別注意:一是剛切換到新的寄件網域時(就像我們從沙箱換到正式子網域的那次),二是做大型會員名單匯入或一次性大量通知時。這兩種情況都會製造突發的流量尖峰,值得分批、分時段送出。

聲譽的另一面是「退信管理」。如果你持續寄信給不存在的信箱、或是早就失效的地址,高退信率會直接拖垮你的聲譽。寄信服務通常會回報 hard bounce(永久失效)與 soft bounce(暫時性失敗)事件——你必須真的去處理這些事件,把 hard bounce 的地址從名單裡移除,而不是放著不管繼續寄。

信件內容與使用者互動會影響送達率嗎?

就算你的 SPF、DKIM、DMARC 全部設定正確、網域聲譽也良好,信件內容本身仍然會影響它落在收件匣還是垃圾桶。現代的反垃圾系統不只看技術驗證,也看內容信號與使用者互動。

幾個我看過實際造成差別的因素:

更深一層的是「使用者互動信號」。當收件人打開你的信、回信、把你從垃圾桶移到收件匣、或把你加入聯絡人,這些都是強烈的正面信號,會讓收件方更願意把你之後的信放進收件匣。反過來,如果大量收件人直接刪除、或按「檢舉垃圾郵件」,你的聲譽會快速下滑。

這就是為什麼「只寄使用者真正期待收到的信」這麼重要。系統信之所以送達率通常比行銷信高,正是因為使用者剛剛做了一個動作(註冊、下單、要求重設密碼)、正在等這封信——這種高互動、被期待的信,本質上就是收件方眼中的好信。

收不到信的診斷清單

把前面所有的教訓濃縮成一份可以照著走的排查順序。當你接到「會員收不到信」的回報時,依序檢查:

  1. 確認寄件網域不是沙箱/測試域。如果寄件位址還是 @something.dev 或服務預設的測試域,幾乎可以直接確定問題在這。換成你自己擁有並驗證過的網域。
  2. 去寄信服務後台讀真實的事件,不要只看你自己的應用程式日誌。看每一封信的狀態:是 delivered、bounced、deferred,還是 spam complaint?真相在這裡,不在你的程式碼裡。
  3. 用線上工具檢查 SPF、DKIM、DMARC 三條記錄是否都存在且正確、SPF 的 DNS 查詢次數有沒有超過 10 次上限。
  4. 檢查退信與檢舉率。是不是在寄給一堆失效信箱?是不是某類信被大量檢舉?
  5. 請回報問題的會員去翻垃圾桶。如果信在垃圾桶,那就是送達率問題(聲譽或內容),不是「沒寄出」的問題,排查方向完全不同。
  6. 確認沒有近期的流量尖峰。是不是剛換網域、剛做大量匯入,觸發了保守過濾?

這份清單的精神是:從最外層(網域與信任)往內查,而不是一開始就鑽進程式碼。我們自己繞的冤枉路,就是因為一開始的方向反了。

送達率是信任工程的一環

我把這篇文章放在「信任工程」這個主題下,是因為系統信送達率和我們在做的其他事情——KYC 身分驗證、結構化資料(Schema)、內容真實性憑證——其實是同一件事的不同面向:讓機器(無論是收件伺服器、搜尋引擎還是 AI 爬蟲)有辦法驗證「你是你說的那個你」。

SPF、DKIM、DMARC 本質上就是「網域身分的密碼學驗證」。它和你在網站上佈署 Schema 結構化資料讓搜尋引擎理解你是誰、和你用 KYC 驗證一個會員的真實身分,是完全同構的問題。每一個都是在一個預設互不信任的環境裡,建立「可被機器驗證的信任」。

對 SME 創辦人和 CMO 來說,這帶來一個很實際的心態轉變:送達率不是 IT 部門事後補救的雜務,而是你品牌可信度的一部分。一個會員連你的驗證信都收不到的品牌,無論前端做得多漂亮,在那個關鍵時刻就已經失去了信任。把寄件信任工程做對,是你對「我們是一家認真、可被驗證的公司」這件事最低成本、卻最容易被忽略的證明。

這些不是理論。這是我們在自己的正式環境裡,一個坑一個坑踩出來、修起來的真實經驗——從沙箱網域的靜默失敗,到切換正式子網域,到多語系站點的網域額度限制。如果你正在被「會員收不到信」困擾,希望這篇文章能讓你少走我們走過的彎路。

把信任變成你的競爭優勢

寄件信任、結構化資料、身分驗證——這些可被機器驗證的信任信號,是 TrueLink 一直在做的事。如果你想把自己的數位信任基礎建設好,我們很樂意一起看你的具體情況。

預約一次諮詢 閱讀更多戰略誌文章