快轉到主要內容

在 Gmail 上使用自訂網域收發信

·2457 字· loading · loading ·
目錄
免費 Gmail 帳號不是郵件主機,收信靠 MX 轉發,寄信靠「以其他地址寄信」,再用 SPF / DKIM / DMARC 讓信不進垃圾桶。

懶得看原理可以直接跳到教學


網域、DNS 與信箱的關係
#

免費的 Gmail 帳號只是一個信箱,它既不是 example.com 的郵件主機,也管不到 example.com 的 DNS。想用 you@example.com 收發信,等於是繞著這個帳號、在網域的 DNS 上補幾筆紀錄,再接上第三方服務。

一封信會不會進到你的 Gmail、寄出去會不會被當成垃圾信,都由 DNS 紀錄決定:

目的DNS 紀錄內容由誰提供
決定誰負責收 example.com 的信MX轉發服務
宣告誰能代表 example.com 寄信TXT(SPF,根網域)你 / 寄信服務
幫寄出的信加上可驗證的簽章TXT(DKIM,選擇器._domainkey寄信服務產生金鑰
驗證失敗時要收件方怎麼處理TXT(DMARC,_dmarc.example.com

整體資料流:

1Receiving (forwarding)
2  sender  --->  MX (example.com)  --->  forwarding service  --->  you@gmail.com
3
4Sending ("send mail as")
5  Gmail compose, From: you@example.com  --->  smtp.gmail.com  --->  recipient

收信與寄信是兩條獨立的路,要分開設定;但寄信的驗證信會走收信這條路,所以先做收信。


【收信】把網域信箱轉發到 Gmail
#

免費 Gmail 不能當 MX 目標,收信要靠「轉發服務」:example.com 收下信,再原封不動轉寄到你的 Gmail。

首先,在你網域 Name Server 的管理介面上,找到轉發信箱相關的功能並設定。

以 Cloudflare 為例,位置在左側 Build 區域的 Compute > Email Service > Email Routing

在該頁面中點選右上角「Onboard Domain」,並在 Zone 欄位選擇你的 Domain 後按 Continue

接著 Cloudflare 會自動建置好要給信箱使用的 DNS records,直接按下 Activate 即可:

接著到「Destination Address」去設定要轉發的目的地:

輸入信箱並按下 Add Address 後,Cloudflare 會寄信到該信箱要求驗證,記得去收信。

等到轉發信箱顯示 Verified 狀態後,便可以在 Routing rules 頁面設定轉發規則。
可以很暴力的直接把所有寄送到該網域的信都寄去你的 Gmail,或者設定轉發規則:

  • Email pattern 就是給他人寄信用的目標位置
  • Action 選擇「Send to an email」
  • Destination 則是轉發的目標信箱,也就是最後要收信的 Gmail 信箱

p.s. 雖然預設會自動關閉,但還是注意一下設定完規則後,Routing rule 區塊的「Catch-all」是否呈現 Disabled 狀態,若為 Enabled 則可能會搶到規則,應予以關閉。

接著便可以寄信到你所設定的自訂網域 Email pattern,然後到目標 Gmail 信箱去察看是否有收到信件。


【寄信】在 Gmail 以網域身分寄出
#

Gmail 的「以其他地址寄信」讓你可以在同個帳號內切換不同的寄件者身分,透過 smtp.gmail.com 送出。

先開啟該 Gmail 的 Google 帳號兩步驟驗證,並產生一組應用程式密碼

創建應用程式名稱,並保留密碼
名稱可以隨意,推薦設為網域名稱,未來比較能一眼看出為該網域所使用。

用電腦開啟 Gmail 後,右上角的齒輪按鈕點開,點擊「查看所有設定」。

選擇分頁「帳戶和匯入」,在「選擇寄信地址」區塊點擊「新增另一個電子郵件地址」。

名稱就填該信箱要讓人看到的名稱,地址填你網域那邊的 Email pattern (上述例子來說為 you@example.com),「視為別名」則建議不勾選。

關於「視為別名」勾選與否的差別,官方是這麼解釋的:

行為勾選不勾選
寄到另一個地址的信顯示在這個 Gmail 收件匣
你從另一個地址寄出的信顯示在「寄件備份」
回覆你透過另一個地址寄送的信時,「收件者」欄填入原信「收件者」的地址寄件者的地址
回覆你透過群組別名寄送的信時,「收件者」欄填入原信「收件者」的地址群組地址

SMTP 伺服器填 smtp.gmail.com
連接埠 587、SSL;
帳號是你的完整 Gmail 地址
密碼則是填剛才創建的 應用程式密碼 (記得去除空格)。

Google 會寄一封驗證信到你所設定的自訂網域信箱,也就是上述的 you@example.com

由於收信的部分已經先設定好了,所以可以直接到 Gmail 收取該信完成驗證。


切換寄件者身份
#

在設定中的「帳戶與匯入」分頁裡,
如果你希望使用預設自訂網域發信,則可以在「選擇寄件地址」中找到自訂網域信箱,並點擊「設為預設值」即可;
或者如果想依照他人寄信所填寫的收件者來自動切換回覆的寄件者,則可以選擇底下「回覆郵件時:」區塊的「來自和郵件傳送地址相同位置的回覆」選項。

當然也可以在寄信時手動調整:


讓寄出的信不進垃圾桶:SPF / DKIM / DMARC
#

這三筆 TXT 用來向收件方證明「這封掛著 example.com 的信是被授權的」,少了它們,寄出的信容易被丟進垃圾信匣或直接退回。

  • SPF(根網域):列出可代表 example.com 寄信的主機。走 Gmail 寄出時實際由 Google 送出,例如 v=spf1 include:_spf.google.com include:_spf.mx.cloudflare.net ~all(後者是 Cloudflare 轉發用的,依你的服務調整)。
  • DKIM選擇器._domainkey.example.com):由寄信服務產生金鑰、你貼進 DNS,寄出的信會帶上用 example.com 簽的數位簽章。
  • DMARC_dmarc.example.com):先用 v=DMARC1; p=none; rua=mailto:you@example.com 觀察報告,確認 SPF 或 DKIM 有對齊到 example.com,再收成 quarantinereject

免費 Gmail 的限制:「以其他地址寄信」送出的信,DKIM 是用 gmail.com 簽的、不是 example.com,DMARC 的對齊過不了。要完全對齊,得改用「能以你網域 DKIM 簽章的外寄 SMTP」(部分轉發服務的付費方案),或直接上 Google Workspace

以剛剛的範例來說,你可能需要到 Cloudflare 編輯它自動生成的 TXT DNS record,把原本的

1"v=spf1 include:_spf.mx.cloudflare.net ~all"

改成

1"v=spf1 include:_spf.google.com include:_spf.mx.cloudflare.net ~all"

或許你會想改用 Google Workspace?
#

如果很在意到達率、要多個帳號,或想共用行事曆 / 雲端硬碟,付費的 Google Workspace 更省事,它提供真正的信箱,不需要轉發服務。

  • MX 全部指向 Google。
  • 在管理主控台產生 DKIM 金鑰,貼進 DNS。
  • SPF 用 v=spf1 include:_spf.google.com ~all

References
#

Alpaca
作者
Alpaca
No one can stop my feet.

相關文章