Email Sending(发信)
Lumen 通过 Cloudflare 的 Email Sending 绑定 (send_email) 发送邮件。 绑定声明在 wrangler.jsonc 中:
"send_email": [
{ "name": "EMAIL" }
]worker/routes/send.ts 会按需构造 RFC 822 消息(纯文本+HTML 时使用 multipart/alternative,带附件时使用 multipart/mixed),然后按收件人逐个调用绑定。
已验证目的地址
Cloudflare 要求每封发出邮件的 目的地址 必须是同一账号下已验证的地址。 请在 Email → Email Routing → Destination addresses 中验证地址。
如果想要更通用的对外发信,可以把 Lumen 与某个事务邮件服务(ESP)结合使用。 当前规则参见 Cloudflare 官方文档。
发件身份
只有在 设置 → 地址 中注册过的地址,才能作为发件地址。Worker 会拒绝 不匹配的 From,返回 403。
Message-ID 自动生成为 <random@<from-domain>>。回复时保留 In-Reply-To、 References,确保邮件客户端中的会话不会断裂。
附件
写信界面会把附件 base64 编码后 POST 到 /api/send。Worker 解码、构造 multipart 消息体,并把一份副本写入 R2 的 att/<userId>/<messageId>/<attachmentId>。 浏览器侧总大小上限为 20 MB;Cloudflare 也有自己的单封邮件大小上限。
草稿
写信内容每 1.5 秒自动保存到 /api/drafts。草稿位于 drafts 系统文件夹, 本质上是一行 messages 记录,folder = 'drafts' 且 is_read = 1。 点击发送会消费掉这条草稿(Worker 会在发送成功后删除)。