用云工 EMAIL 绑定的 send 实现邮件发送接口。
源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。
# 邮件发送云工适配
用云工 `EMAIL` 绑定的 `send` 实现接口:适配先在豫言里逐字符解码 UTF-8 并按规范校验地址、主题、正文(空白、控制字符、多收件人、CRLF 注入都在这里被拒绝),再用 `云工调用方法安全` 调用 `send`,把同步异常和 Promise 拒绝都转成(阴,固定原因),只从错误 JSON 里取名称而不取消息。传给 `send` 的对象由豫言 JSON 编码器生成,恰为 `{from, to, subject, text}`。
**依赖宿主原语 `豫言_云工_授权绑定存在(种类, 名称)`**(现由 `宿主.mjs` 提供,环境文字适配同用):先核对 `许可[种类]` 含该名,未授权抛出宿主错误(部署错误,豫言不可捕获),已授权则返回环境里该绑定是否为真值。现有的 `云工绑定句柄` 在绑定缺失时抛出宿主 JS 错误,豫言无法捕获,所以“已授权但当前部署没有配置该绑定”必须由这个原语先答复。适配在自己的模块里用 `《《外调》》` 声明它的包装;缺少该原语的旧宿主上每次发送都会以“未授权宿主能力”中止,一致性测试会在开头指出这一点。
真实本地 workerd(Wrangler 4.129.0,`send_email` 绑定配置了 `allowed_sender_addresses`)实测:`send({from,to,subject,text})` 对许可的发件地址被接受,本地平台收到的 From、To、Subject 与正文文件逐字等于输入(含换行、引号、反斜线、emoji 与 CRLF);发件地址不在许可列表时 `send` 拒绝,错误名称为 `Error`,适配返回(阴,`邮件发送失败:Error`),不含任何地址;被本包校验拒绝的注入请求没有到达平台。综合场景见 `../消息队列/一致性验证/真实工作者/`。
`一致性验证/` 里有试验应用、真实 Wasm 的 Node 测试和复跑说明。
# 邮件发送云工适配
以云工 `EMAIL` 绑定之 `send` 承此约:适配先于豫言逐字符解 UTF-8,依规范校址、主题、正文(空白、控制之字、多收件人、CRLF 之注,皆于此拒之),复以 `云工调用方法安全` 呼 `send`,同步之异与 Promise 之拒,皆化为(阴,定因),惟自错误 JSON 取其名,不取其辞。授 `send` 之物,由豫言 JSON 编码器成之,恰为 `{from, to, subject, text}`。
**倚宿主之原语 `豫言_云工_授权绑定存在(种类, 名称)`**(今由 `宿主.mjs` 供之,环境文字适配亦用之):先核 `许可[种类]` 含此名,未授则抛宿主之误(部署之误,豫言不可捕),已授则返环境中此绑定之真否。今之 `云工绑定句柄` 于绑定阙如则抛宿主 JS 之误,豫言不可捕,故“已授而当前部署未置此绑定”者,须此原语先告之。适配于己之模块以 `《《外调》》` 声明其包装;旧宿主无此原语,则每发皆以“未授权宿主能力”而止,一致性测试于篇首言之。
真本地 workerd(Wrangler 4.129.0,`send_email` 绑定配 `allowed_sender_addresses`)实测:`send({from,to,subject,text})` 于许可之发件址则受,本地平台所收之 From、To、Subject 与正文之文件,逐字同于所入(含换行、引号、反斜线、emoji 与 CRLF);发件址不在许可之列,则 `send` 拒之,误名为 `Error`,适配返(阴,`邮件发送失败:Error`),不含任何地址;为此包校验所拒之注入,未达平台。综合之场见 `../消息队列/一致性验证/真实工作者/`。
`一致性验证/` 有试应用、真 Wasm 之 Node 测试及复行之说明。