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。

  • 分类: email
  • 状态: 可用
  • 版本: 0.3.1
  • 价格: 未知
  • 来源: 官方插件注册表
  • 安装方式: 注册表沙盒插件
  • 核实日期: 2026-10-21

描述

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 密钥,保留的邮件内容经过加密,登录邮件绝不会被保留。
  • 后台支持英语、法语和德语,可在手机上使用。

服务商

服务商凭据可列出的发件人账户状态
BrevoAPI 密钥地址套餐、额度
MailgunAPI 密钥、域名、区域域名域名状态
MailjetAPI 密钥、密钥(secret key)地址、域名无
Maileroo发送密钥无无
Postmark服务器令牌无服务器、模式
Mailchimp TransactionalMandrill 密钥域名信誉、配额
ResendAPI 密钥域名套餐、配额
SendGridAPI 密钥地址、域名套餐、额度
MailerSendAPI 令牌地址、域名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 密钥。

安装

  1. 从插件注册表安装 Mail API。
  2. 查看权限并确认:仅向服务商 API 主机发起请求,以及投递 EmDash 邮件。

也可以通过 npm 安装:pnpm add @devbitme/emdash-plugin-apimail,然后把默认导入添加到 astro.config.mjs 中 emdash() 集成的 sandboxed: [...] 里。

设置

  1. 在后台打开 Mail API,然后点击你的服务商的 Configure。
  2. 粘贴密钥并保存。Account 部分会确认密钥是否有效。
  3. 在 Send a test email 中选择一个已验证的发件人,输入你的地址并发送。保持 Use as the default sender 开启,以保留该发件人。
  4. 在列表中点击该服务商卡片上的 Activate。
  5. 如果安装了多个邮件传输通道,请在 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 个字符。
  • 新增德语后台。