发送邮件
如何通过控制台或 API 撰写并发送一封邮件。
Rovela 通过 API 发送邮件。控制台提供日志和监控视图,但实际发送是通过 API 调用完成的——可以来自你自己的代码,也可以来自控制台里的快速发送表单。
发送前的准备
发信前需要满足两个条件:
- 一个已验证的发信域名。
from地址必须属于你在「域名」里添加并验证过的域名。向未验证域名发送请求会被拒绝,返回一个点名该域名的400。 - 一个 API 密钥。在「API 密钥」里创建;生产环境用
sending_access。
通过 API 发送
最少需要的字段是 from、to、subject,以及 html 或 text 之一:
curl -X POST https://api.rovela.dev/emails \
-H "Authorization: Bearer re_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@yourdomain.com>",
"to": "user@example.com",
"subject": "你的账单",
"html": "<p>感谢你的购买。</p>"
}'请求成功后返回邮件 id:
{"object": "email", "id": "9f1c2e40-..."}to 字段接受单个地址字符串或最多 50 个地址的数组。cc 和 bcc 的写法相同。地址里的名字部分——上例中的 Acme——可以省略。
添加附件
附件用 base64 编码后内联在请求体里:
{
"from": "billing@yourdomain.com",
"to": "user@example.com",
"subject": "你的账单",
"html": "<p>请查收附件中的账单。</p>",
"attachments": [
{
"filename": "invoice-2026-10.pdf",
"content": "<base64 编码的内容>",
"content_type": "application/pdf"
}
]
}请求体总大小(含所有附件)不能超过 40 MB。更大的文件建议在邮件正文里附链接,而不是直接附在邮件里。
定时发送
在请求里加上 scheduled_at 字段,填 ISO 8601 格式的时间戳,可以让邮件在指定时间才投递。时间戳必须至少比当前时间晚 5 分钟:
{
"from": "newsletter@yourdomain.com",
"to": "subscriber@example.com",
"subject": "本周更新",
"html": "...",
"scheduled_at": "2026-11-01T09:00:00Z"
}已排期的邮件在发送时间到达之前,可以用 PATCH /emails/:id 改时间或取消。一旦投递就无法撤回。
使用模板
如果你在「模板」里保存了模板,可以在发送时按 slug 引用,并传入变量值。使用模板时不需要 html 字段,正文来自模板:
{
"from": "hello@yourdomain.com",
"to": "user@example.com",
"subject": "欢迎,{{first_name}}",
"template": "welcome-email",
"variables": {
"first_name": "Alex",
"plan": "Pro"
}
}查看投递状态
200 表示邮件已受理,不代表已到达。发送后查看状态的两种方式:
GET /emails/:id——邮件当前的状态字段。GET /emails/:id/events——带时间戳的完整投递时间线。
生产环境建议用 webhook 代替轮询。控制台「邮件」页面的时间线视图不需要任何 API 调用。
抑制发送
向抑制列表里的地址发信,API 会正常受理并返回 id,但邮件实际上不会投递,状态变为 suppressed。如果某封预期能到的邮件没有出现,先查一下「抑制列表」页面。哪些情况会自动加入抑制列表,见 控制台总览。