协作办公
在 Caffeine AI 后端 canister…
用于 Caffeine AI 项目中从 backend canister 发送服务/事务类一次性邮件(如订单确认、通知),不适用于营销或验证邮件。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Caffeine AI 后端 can特定
解决思路
- 使用预制模块 `mo:caffeineai-email/emailClient.mo` 从 backend canister 发送服务/事务邮件;该模块不可修改。
- 调用 `sendServiceEmail` 函数发送订单确认、通知等一次性邮件。
- 每个收件人会收到一封单独邮件;如需发给多个邮箱,将它们放入 `recipients` 数组,而不是依赖群发。
- 按签名调用:`sendServiceEmail(fromUsername : Text, recipients : [Text], subject : Text, htmlBody : Text) : async SendResult`,传入发件用户名、收件人邮箱数组、主题和 HTML 正文。
- 处理返回值 `SendResult`:发送成功为 `#ok`,失败为 `#err(error)`,其中 `error` 为错误文本。
- 在 Motoko 中导入 `Runtime "mo:core/Runtime"` 和 `EmailClient "mo:caffeineai-email/emailClient"`,并在 actor 中定义公开异步函数来 await 调用 `EmailClient.sendServiceEmail(...)`。
- 调用示例参数:`fromUsername` 传 `"no-reply"`,`recipients` 传 `[recipientEmailAddress]`,`subject` 用字符串拼接如 `"Order " # orderReference # " confirmed"`,`htmlBody` 用字符串拼接如 `"Hello " # username # ",\nYour order " # orderReference # " has been confirmed. Your items will ship tomorrow."`。
- 对返回结果用 `switch` 分支处理:`case (#ok) {};` 表示成功;`case (#err(error)) { Runtime.trap("Failed to send order confirmation email: " # error); };` 表示失败时通过 `Runtime.trap` 报错。
- 将发送逻辑放在 backend canister 的公开函数中,例如 `sendOrderConfirmationEmail(recipientEmailAddress : Text, username : Text, orderReference : Text) : async ()`。
适用边界 · 注意事项
- 不要用于发送营销邮件。
- 不要用于发送验证邮件。
- 不适用于没有 Caffeine AI 环境、未引入兼容的 `caffeineai-email` 模块(`~0.2.0`)或没有 `plus/pro` 订阅的项目。