跳到內容
Yuva

適用於 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. 1客戶寫信到你的某個支援信箱,例如 support@example.com。
  2. 2Cloudflare Email Routing 接收郵件並交給 Yuva Email Worker。
  3. 3Worker 使用你與 Yuva 共享的密鑰,以 HMAC-SHA256 對原始郵件、兩個信封位址與時間戳記簽章,並傳送到你 Yuva 伺服器的 /ingress/email。
  4. 4在讀取郵件之前,Yuva 會檢查簽章以及時間戳記是否在 5 分鐘之內。簽章錯誤的請求會被拒絕。
  5. 5Yuva 根據收件位址找到郵件頻道,並依 In-Reply-To 與 References 把郵件歸入它所屬的對話。其他情況會開啟新對話。回覆會重新開啟對話。
  6. 6你的團隊在面板中回覆。回覆透過郵件頻道自己的 SMTP 帳號寄出,例如 Amazon SES、Postmark 或你自己的中繼,使用同一個位址並在同一個執行緒中。回覆不經過 Worker。

拒收會回報給寄件者

當 Yuva 永久拒絕一封郵件時,例如位址未知、寄件者被封鎖或郵件過大,Worker 會拒收它,寄件者會收到附有 Yuva 所給原因的永久性 SMTP 錯誤。

如果無法連線到 Yuva

如果 Yuva 回傳伺服器錯誤、20 秒內沒有回應或無法連線,只要你設定了 FALLBACK_FORWARD,Worker 就可以把郵件轉寄到你選擇的位址。該位址必須是 Email Routing 中已驗證的目的地。郵件會以一般轉寄郵件送達,不會出現在 Yuva 中。沒有 FALLBACK_FORWARD 時,投遞會失敗並回報錯誤,寄件端伺服器可能稍後重試。

幾步即可完成設定

你需要一台 Yuva 伺服器,以及一個管理該網域的 Cloudflare 帳號。

  1. 1

    在 Yuva 中,開啟設定 → 你的收件匣 → 頻道 → 郵件,加入支援信箱。在伺服器上設定一組密鑰並重新啟動:

    YUVA_INGRESS_SECRET=<openssl rand -hex 32>
    YUVA_INGRESS_AUTHSERV_ID=mx.cloudflare.net
  2. 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. 3

    在 Cloudflare 控制台中,開啟你的網域 → Email → Email Routing 並啟用。Cloudflare 會加入它的 MX 與 SPF 記錄。

  4. 4

    在 Routing rules 下,把每個支援信箱傳送到名為 yuva-edge 的 Worker。對於萬用頻道,把萬用規則指向它。

  5. 5

    傳送一則測試訊息,看對話出現在面板中。

  6. 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 無關聯,也未獲其認可。