[總管交辦] 新零件:send_email(CF 原生寄信 binding)——工作流目前無法寄信 #75
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
缺口
Arcrun 工作流目前無法寄信——沒有對應零件。想寄信只能繞道(自建 worker 直接用 binding),
那條路不在零件體系內、工作流用不到。
為什麼值得做(leo 2026-07-27)
差異化很實在:
自架要搞一整套(MTA、DKIM 簽章、SPF、反向 DNS、退信迴圈),CF 內建。
這是 Arcrun 包在 CF 上的價值主張的一個具體體現。
技術形狀
平台能力=
send_emailbinding(非 SMTP、非 http_request):注意它不是外部 API——無 endpoint/無 token/無 auth,
所以 recipe 那套(URL+認證+參數映射)在這裡沒有東西可映射,
零件本身要直接吃 binding,設計上與 http_request 家族不同。
🔴 實作必踩的雷(2026-07-27 花了數小時才定位,請務必內建)
手組 MIME 必須包含
Message-ID與Date,否則 CF 判 spam 拒收:POST /accounts/{id}/email/sending/send)→ 服務端會自動補這兩個表頭send_emailbinding → 必須自己給,缺了就被拒症狀極具誤導性:Activity Log 的 Subject/Sender 兩欄全空(CF 解析不出表頭),
而
send()不會拋錯(wrangler tail看到exceptions:[]),呼叫端因此以為寄成功。實例排除清單:DNS/SPF/DKIM 齊備、DMARC 非主因、
Suppressions 空、收件方無關(假地址同樣被拒)。
正解:
另 MIME 須以 CRLF 結尾(RFC 5322 §2.1)。
零件應該把這些封裝掉,讓工作流作者不必知道 RFC 5322。
參考實作
arcrun-rag的landing/worker.js→sendCodeEmail()(已修正版,端到端實測寄達)。[總管交辦] 來源:2026-07-27 leo 走小白安裝旅程時的討論
🔴 這張票現在擋著一個已經上 prod 的繞道(2026-08-11)
2026-08-11 出貨的「忘記密碼代寄」走的正是本票所說的繞道:
自建 worker 直接用
send_emailbinding,174 行手寫 JS,不在零件體系內。leo 當天看 leo21c 的工作流頁時當場抓到:「沒有這條工作流,你是怎麼達成的?」
⇒ 本票不再只是「差異化很實在」的加分項,它是一條已經在生產環境上的技術債的前置。
⇒ 對應票:
Leo/arcrun-rag#75(已掛依賴指向本票)。