適用於 Cloudflare 的 Yuva Email Worker
透過 Cloudflare 接收支援郵件。不必執行郵件伺服器。
Cloudflare® Email Routing 接收你支援信箱的郵件,開源的 Yuva Email Worker 為每封郵件簽章後交給 Yuva。它會以一則由你的團隊回覆的對話,出現在共用收件匣裡。
是什麼
前置 Email Routing
Cloudflare Email Routing 成為你網域的 MX 並接收郵件。Yuva 不監聽 SMTP,所以不必安裝或維護郵件伺服器。
一個小巧的開源 Worker
Yuva Email Worker 讀取原始郵件與信封,為請求簽章並交給 Yuva。解析、執行緒歸併與垃圾郵件判斷都留在伺服器上。
真實的對話
寄到支援信箱的郵件會在收件匣中開啟或延續一則對話,團隊在與聊天及應用程式內訊息相同的面板中回覆。
一封郵件如何從客戶送達你的團隊
- 1客戶寫信到你的某個支援信箱,例如 support@example.com。
- 2Cloudflare Email Routing 接收郵件並交給 Yuva Email Worker。
- 3Worker 使用你與 Yuva 共享的密鑰,以 HMAC-SHA256 對原始郵件、兩個信封位址與時間戳記簽章,並傳送到你 Yuva 伺服器的 /ingress/email。
- 4在讀取郵件之前,Yuva 會檢查簽章以及時間戳記是否在 5 分鐘之內。簽章錯誤的請求會被拒絕。
- 5Yuva 根據收件位址找到郵件頻道,並依 In-Reply-To 與 References 把郵件歸入它所屬的對話。其他情況會開啟新對話。回覆會重新開啟對話。
- 6你的團隊在面板中回覆。回覆透過郵件頻道自己的 SMTP 帳號寄出,例如 Amazon SES、Postmark 或你自己的中繼,使用同一個位址並在同一個執行緒中。回覆不經過 Worker。
拒收會回報給寄件者
當 Yuva 永久拒絕一封郵件時,例如位址未知、寄件者被封鎖或郵件過大,Worker 會拒收它,寄件者會收到附有 Yuva 所給原因的永久性 SMTP 錯誤。
如果無法連線到 Yuva
如果 Yuva 回傳伺服器錯誤、20 秒內沒有回應或無法連線,只要你設定了 FALLBACK_FORWARD,Worker 就可以把郵件轉寄到你選擇的位址。該位址必須是 Email Routing 中已驗證的目的地。郵件會以一般轉寄郵件送達,不會出現在 Yuva 中。沒有 FALLBACK_FORWARD 時,投遞會失敗並回報錯誤,寄件端伺服器可能稍後重試。
幾步即可完成設定
你需要一台 Yuva 伺服器,以及一個管理該網域的 Cloudflare 帳號。
- 1
在 Yuva 中,開啟設定 → 你的收件匣 → 頻道 → 郵件,加入支援信箱。在伺服器上設定一組密鑰並重新啟動:
YUVA_INGRESS_SECRET=<openssl rand -hex 32> YUVA_INGRESS_AUTHSERV_ID=mx.cloudflare.net
- 2
使用同一組密鑰,將 Worker 部署到你的 Cloudflare 帳號:
cd edge bun install bunx wrangler login bunx wrangler secret put INGRESS_SECRET bunx wrangler deploy --var YUVA_URL:https://support.example.com
- 3
在 Cloudflare 控制台中,開啟你的網域 → Email → Email Routing 並啟用。Cloudflare 會加入它的 MX 與 SPF 記錄。
- 4
在 Routing rules 下,把每個支援信箱傳送到名為 yuva-edge 的 Worker。對於萬用頻道,把萬用規則指向它。
- 5
傳送一則測試訊息,看對話出現在面板中。
- 6
選用:在部署指令中加入備用位址,以便在故障期間保留郵件:
bunx wrangler deploy --var YUVA_URL:https://support.example.com --var FALLBACK_FORWARD:you@example.org
Email Routing 會成為網域的 MX,所以請使用沒有其他郵件伺服器處理的網域或子網域。
閱讀設定指南 →不與 Cloudflare 綁定
Worker 是呼叫 /ingress/email 的一種方式。任何郵件伺服器或中繼都可以用相同的簽章標頭傳送原始郵件,而投遞給指令的郵件伺服器可以把郵件透過管線交給 yuva ingest-email。請求格式記錄在 Worker 的 README 中。
問與答
我需要執行郵件伺服器嗎?
不適用於收信。Yuva 不監聽 SMTP;郵件由 Cloudflare Email Routing 接收,再由 Worker 轉交。回覆需要郵件頻道的 SMTP 帳號,例如 Amazon SES、Postmark 或你自己的中繼。
Yuva 當機時會怎樣?
設定了 FALLBACK_FORWARD 後,郵件會改為轉寄到該位址。沒有它則投遞失敗,寄件端伺服器可能會重試。Yuva 有意拒收的郵件,例如寄往未知位址的郵件,會被拒收而不是轉寄。
我可以使用哪些網域與位址?
任何你在 Cloudflare 中管理、且沒有其他伺服器處理其郵件的網域,因為 Email Routing 會成為它的 MX。每個郵件頻道有一個位址,或用萬用位址 *@example.com 接收該網域下所有沒有頻道精確對應的位址。support+billing@example.com 這類子位址會送到 support@example.com 的頻道。
郵件最大可以多大?
郵件連同附件上限為 25 MiB,這是 Cloudflare Email Routing 的限制。Yuva 每封郵件最多保留 50 個附件,每個附件須在伺服器的附件大小限制(預設 25 MiB)與允許的類型之內,其餘的會略過。
有人能偽造寄往我的 Yuva 伺服器的郵件嗎?
Yuva 會在讀取本文之前,拒絕任何沒有有效 HMAC 簽章或時間戳記偏差超過 5 分鐘的請求。請妥善保管密鑰。
Yuva 會使用 Cloudflare 的 DMARC 結果嗎?
會,前提是你把 YUVA_INGRESS_AUTHSERV_ID 設為 mx.cloudflare.net。此時 Yuva 會讀取 Email Routing 加入的 DMARC 結論。未通過 DMARC 的新對話會被標記為垃圾郵件。
Cloudflare、Cloudflare 標誌與 Cloudflare Workers 是 Cloudflare, Inc. 在美國及其他司法管轄區的商標和/或註冊商標。Yuva 是獨立的開源專案,與 Cloudflare 無關聯,也未獲其認可。