Mail API
透過 HTTP API 傳送交易型郵件:Brevo、Mailgun、Mailjet、Maileroo、Postmark、Mailchimp、Resend、SendGrid、MailerSend、Scaleway。
外掛
Mail API
透過 HTTP API 傳送交易型郵件:Brevo、Mailgun、Mailjet、Maileroo、Postmark、Mailchimp、Resend、SendGrid、MailerSend、Scaleway。
說明
Mail API 讓您的電子郵件服務供應商的 HTTP API 成為 EmDash 的郵件傳輸管道。登入連結、邀請郵件與外掛程式郵件都透過 Brevo、Mailgun、Postmark 或其他服務寄出,不需要 SMTP 伺服器。
功能
- 10 家服務供應商:Brevo、Mailgun、Mailjet、Maileroo、Postmark、Mailchimp Transactional(Mandrill)、Resend、SendGrid、MailerSend 與 Scaleway TEM。
- 已驗證的寄件者:選擇服務供應商已驗證的位址或網域,也可以手動輸入。
- 帳號狀態:方案、額度、配額與信譽,直接從服務供應商 API 讀取。
- 可採取行動的錯誤訊息:服務供應商自己的訊息,附帶 HTTP 狀態碼、錯誤代碼、提示、指向解決頁面的連結以及原始回應。
- 重試佇列:當服務供應商當機或觸發速率限制時,郵件會在加密佇列中等待,並以逐漸增加的間隔重新傳送。
- 歷史與紀錄:每次傳送都記錄狀態、訊息 ID、嘗試次數與耗時,支援篩選、重新傳送、14 天圖表與儀表板小工具。
- 每個服務供應商頁面上都有測試表單。
- 加密:API 金鑰是 EmDash 密鑰,保留的郵件內容經過加密,登入郵件絕不會被保留。
- 後台支援英文、法文與德文,可在手機上使用。
服務供應商
| 服務供應商 | 憑證 | 可列出的寄件者 | 帳號狀態 |
|---|---|---|---|
| Brevo | API 金鑰 | 位址 | 方案、額度 |
| Mailgun | API 金鑰、網域、區域 | 網域 | 網域狀態 |
| Mailjet | API 金鑰、密鑰(secret key) | 位址、網域 | 無 |
| Maileroo | 傳送金鑰 | 無 | 無 |
| Postmark | 伺服器權杖 | 無 | 伺服器、模式 |
| Mailchimp Transactional | Mandrill 金鑰 | 網域 | 信譽、配額 |
| Resend | API 金鑰 | 網域 | 方案、配額 |
| SendGrid | API 金鑰 | 位址、網域 | 方案、額度 |
| MailerSend | API 權杖 | 位址、網域 | API 配額 |
| Scaleway TEM | 密鑰(secret key)、專案 ID | 網域 | 方案、用量 |
對於無法列出寄件者的服務供應商,請手動輸入位址。
安裝
需求
- EmDash 1.3.0 或更新版本,並具備外掛程式沙箱執行器:Cloudflare Worker Loader(Workers Paid 方案),或 Node.js 上的
@emdash-cms/sandbox-workerd。 - 網站上需要有
EMDASH_ENCRYPTION_KEY:它用於加密 API 金鑰。使用npx emdash secrets generate建立,在 Cloudflare 上用wrangler secret put EMDASH_ENCRYPTION_KEY儲存。請在密鑰管理工具中保留一份副本:沒有它,資料庫備份毫無用處。 - 重試佇列需要排程器:Node.js 上已內建。在 Cloudflare 上需要一個
* * * * *的 cron 觸發器與scheduled處理常式(EmDash 範本兩者都包含)。 - 一個受支援服務供應商的帳號與 API 金鑰。
安裝方式
- 從外掛程式註冊表安裝 Mail API。
- 檢視權限並確認:僅向服務供應商 API 主機發出請求,以及投遞 EmDash 郵件。
也可以透過 npm 安裝:pnpm add @devbitme/emdash-plugin-apimail,然後把預設匯入加入 astro.config.mjs 中 emdash() 整合的 sandboxed: [...] 裡。
設定
- 在後台開啟 Mail API,然後點擊您的服務供應商的 Configure。
- 貼上金鑰並儲存。Account 區段會確認金鑰是否有效。
- 在 Send a test email 中選擇一個已驗證的寄件者,輸入您的位址並傳送。保持 Use as the default sender 開啟,以保留該寄件者。
- 在清單中點擊該服務供應商卡片上的 Activate。
- 如果安裝了多個郵件傳輸管道,請在 Settings → Email 下選擇 Mail API。在
astro dev下,EmDash 的主控台傳輸管道也算作其中之一。
設定項目
Queue & history 分頁用於設定郵件可在佇列中等待多久(預設情況下,登入郵件為 15 分鐘,其他郵件為 24 小時)、是否保留郵件內容,以及歷史與紀錄的保留時長(預設 30 天)。
完整文件:https://git.devbit.me/devbit.me/emdash-plugin-apimail
常見問題
我需要 SMTP 伺服器嗎?
不需要。Mail API 透過 HTTPS 呼叫服務供應商的 HTTP API,因此在無法使用 SMTP 的環境(例如 Cloudflare Workers)中同樣可用。
EmDash 的「Send test email」只顯示「Failed to send test email」。
請使用服務供應商頁面上的 Send a test email 表單:它會顯示服務供應商的訊息、提示與原始回應。該錯誤同時也記錄在 Logs 與伺服器紀錄中。
寄件者清單為空,或顯示 HTTP 401 或 403。
該金鑰可以寄信,但無法列出寄件者。Resend 需要 Full access 金鑰,SendGrid 需要 Sender Authentication 與 User Account 的讀取權限,MailerSend 需要 Domains 與 Sender identity,Scaleway 需要 TransactionalEmailReadOnly,Mailgun 需要帳號金鑰,而不是網域傳送金鑰。您仍然可以手動輸入寄件者位址。
錯誤提示說不允許該 IP 位址。
請把您主機的對外 IP 加入服務供應商的允許清單,或關閉該限制。錯誤訊息中包含指向正確頁面的連結。
服務供應商當機時會怎樣?
網路錯誤、逾時、HTTP 429 與 5xx 會把郵件放入加密佇列。它會在 1、5、15 與 30 分鐘後重試,然後是 1 小時、2 小時,之後每 4 小時一次,並透過當時處於啟用狀態的服務供應商傳送。登入郵件在 15 分鐘後過期,其他郵件在 24 小時後過期。永久性錯誤(例如無效金鑰或被拒絕的收件者)不會重試。
佇列一直不執行。
開啟 Mail API 的 Security 分頁:它會列出排程工作,並提供 Repair 按鈕。在 Cloudflare 上,請檢查 cron 觸發器與 scheduled 處理常式。
我的郵件內容會被儲存嗎?
僅在郵件於佇列中等待期間儲存,或者在您開啟 Keep email content in the history 後儲存在歷史中。兩種情況下都經過加密。登入郵件與邀請郵件在傳送後絕不會被保留。
我可以使用多個服務供應商嗎?
可以。設定多個服務供應商,然後在負責傳送的那個上點擊 Activate。服務供應商發生故障時,啟用另一個即可:佇列中的郵件會透過它重新傳送。
安全性
回報漏洞
請寄信至 [email protected]。請不要先公開提交 issue。
權限
- 網路請求,僅限於服務供應商 API 主機:
api.brevo.com、api.mailgun.net、api.eu.mailgun.net、api.mailjet.com、api.us.mailjet.com、smtp.maileroo.com、api.postmarkapp.com、mandrillapp.com、api.resend.com、api.sendgrid.com、api.eu.sendgrid.com、api.mailersend.com、api.scaleway.com。 - 郵件傳輸:EmDash 把待寄出的郵件交給該外掛程式,由外掛程式透過目前啟用的服務供應商傳送。
外掛程式執行在 EmDash 的沙箱中,無法存取其他任何內容。
API 金鑰
API 金鑰是 EmDash 的密鑰設定,使用網站的 EMDASH_ENCRYPTION_KEY 透過 AES-GCM 加密。已儲存的金鑰絕不會回傳到瀏覽器:後台只顯示其最後 5 個字元。服務供應商在錯誤訊息中回顯的任何已設定密鑰都會被遮蔽。
儲存的資料
- 歷史:收件者、主旨、服務供應商、狀態、訊息 ID、嘗試次數、耗時與錯誤。預設 30 天後刪除。
- 郵件內容:僅在郵件於佇列中等待期間保留,或在您開啟該選項後保留在歷史中。它使用隨機的 256 位元金鑰透過 AES-GCM 加密,該金鑰本身作為 EmDash 密鑰儲存。登入郵件與邀請郵件在傳送後絕不會被保留。
- 紀錄:失敗記錄、佇列執行與清理,與歷史一同刪除。
- 已驗證的寄件者與帳號狀態:連同設定的指紋一起快取在外掛程式儲存空間中,絕不包含金鑰。
郵件只會傳送到目前啟用的服務供應商的 API。其他任何內容都不會離開網站。
公開路由
有一個路由是公開的:GET /_emdash/api/plugins/apimail/logo?p=。它提供外掛程式內建的服務供應商標誌,不讀取任何資料。
後台
後台頁面使用私有路由:在外掛程式執行之前,EmDash 要求使用者已登入、有權管理外掛程式,並帶有 CSRF 標頭。
更新日誌
0.3.1
- 每列顯示三張服務供應商卡片,而不是兩張:桌面版的清單更緊湊。
- 每張服務供應商卡片上新增 Website 連結,在新分頁中開啟。
- Set as default 改為 Activate,短到足以放進手機上的卡片。
- 服務供應商頁面會立即根據已儲存的資料開啟,並顯示資料的時效。只有在儲存金鑰或點擊 **Refresh from ** 時才會呼叫服務供應商,並會提示該次呼叫耗時多久。
0.3.0
- 每個已設定服務供應商的卡片上新增 Set as default 按鈕。
- 讀取已驗證寄件者或帳號狀態失敗時,會寫入紀錄,並在下次載入頁面時重試,除非該金鑰缺少相應權限。
- 寄件者清單會顯示其讀取時間,發生錯誤後也一樣。
- 後台頁面適配手機:每列兩張服務供應商卡片,最多三張統計卡片,較長的值獨佔一行,歷史欄位更少。
- 更短的選單項目:History、Queue、Logs。
- 標籤、紀錄、錯誤與測試郵件主旨中使用一般連字號,而不是長破折號。
- 套件更小:服務供應商標誌改用無損 WebP 圖塊。
- 註冊表列表:新增說明、安裝、常見問題、更新日誌與安全性分頁,以及橫幅。
0.2.0
- 從服務供應商處選擇已驗證的寄件者:已驗證的位址、已驗證網域下的任何位址,或手動輸入。位於 Sender 分頁與每個測試表單中。
- 每個服務供應商頁面上顯示帳號狀態:方案、額度、配額與信譽。
- 測試不再需要預先設定寄件者,Use as the default sender 會保留寄送成功的那個寄件者。
- 已儲存的金鑰會顯示其最後 5 個字元。
- 新增德文後台。