Skip to content

v5.3.1

Latest

Choose a tag to compare

@idinging idinging released this 24 May 15:14
· 8 commits to master since this release

V5.3.1 更新说明

发布日期:2026-05-24

延续 V5.3.0 的渠道抽象,新增 Cyberpersons(CyberPanel Email Delivery)作为
第三个内置发件渠道。前端零改动,按发件人邮箱域名自动路由。

主要变更

1. 新增 Cyberpersons 渠道 src/email/providers/cyberpersons/

通过 Cyberpersons 官方 REST API(POST https://platform.cyberpersons.com/email/v1/send
实现单封 / 批量发件,支持单密钥与多域名键值对/JSON 配置。

依托 CyberPanel 的 Cloudflare 集成,可一键自动配置发件域名的 SPF / DKIM / DMARC,
适合不想手动维护 DNS 的场景。完整接入流程见 Cyberpersons 配置教程

2. 渠道路由规则扩展为三层

resolveProvider 在原有 SendFlare / Resend 链路末尾追加 Cyberpersons,保证
老部署行为完全不变

  1. SendFlare 键值对/JSON 命中 → SendFlare
  2. Resend 键值对/JSON 命中 → Resend
  3. Cyberpersons 键值对/JSON 命中 → Cyberpersons(新)
  4. SendFlare 单密钥兜底
  5. Resend 单密钥兜底
  6. Cyberpersons 单密钥兜底(新)
  7. 都没命中 → 抛错

3. 新增环境变量

CYBERPERSONS_API_KEY,格式与 RESEND_API_KEY / SENDFLARE_API_KEY 完全一致
(单密钥 / 键值对 / JSON)。同时识别别名 CYBERPERSONS_API_TOKEN
CYBERPERSONS,与 Resend 的多别名习惯一致。

4. Cyberpersons API 差异适配

Cyberpersons 的请求/响应结构与 Resend 有三处差异,已在 provider 内部消化,
对调用方完全透明:

差异点 Cyberpersons 行为 provider 内部处理
响应 id 位置 data.message_id(不是顶层 id 内部抽取后仍返回 { id, raw }
to / cc / bcc 只接受单字符串,数组返 HTTP 500 数组取首个,与 SendFlare 行为一致
from 显示名 不接受 "Name <addr>",需走独立 from_name 字段 自动从 fromName 或 RFC 5322 串中拆出
错误体结构 { success:false, error:{ type, message } } 拼接成 "type: message" 抛出

5. /api/send/:id 系列端点扩展

GET / PATCH / /cancel 三个 Resend 特有端点,对 Cyberpersons 渠道发出的记录
返回 400「Cyberpersons 渠道暂不支持此操作」,与 SendFlare 的语义保持一致。

兼容性

  • 老部署(仅配 Resend 或 SendFlare)行为 完全等价,无需任何调整
  • DB schema 无变化,sent_emails.provider 列直接写入 'cyberpersons' 字面量
  • 升级方式:拉代码 → wrangler deploy,无需迁移

已知限制

  • 单封只能 1 个收件人,多收件人取数组首个;真实多发请走 /api/send/batch
  • 暂未透传 tags / metadata(Cyberpersons 文档支持但项目内 payload 未产出)
  • 不支持已发邮件的查询 / 修改 / 取消(同 SendFlare 限制)

历史版本见 README.md 版本历史表