Hong Minhee 介绍了他正在做的 JS/TS 邮件库 Upyo,把问题从「在 Node.js 里怎么发邮件」改成「无论运行时与提供商,应用如何可靠投递邮件」。Nodemailer 很好,但它依赖 node:net/tls/stream 这些内建模块,在 Cloudflare Workers、Vercel Edge、Supabase Edge 上很难用,且供应商支持基本围绕 SMTP。Upyo 则全部建立在 fetch()、Web Streams、Web Crypto 等标准 Web API 上,因此同一份代码能原样跑在 Node、Deno、Bun 与边缘函数里;SMTP 与 Resend、SendGrid、SES、Mailgun 等各家 HTTP 服务都通过同一个极小的 Transport 接口接入。正因为接口小、且应用只见接口不见实现,重试策略才能被抽到 RetryTransport、故障转移抽到 PoolTransport 里,两者还能随意叠放;而 `@upyo/mock` 与 `@upyo/logtape` 让你在开发/测试时注入的只是「别真发出去」的 transport,登录取链接或断言收件人即可。底层细节也没省:SMTPUTF8、DSN、附件流式、calendar 与会话头都还在。