Nodemailer: 使用 TypeScript 发送电子邮件
Nodemailer 是最流行的用于从 Node.js 和 TypeScript 应用程序发送电子邮件的模块。它允许通过 SMTP 轻松集成电子邮件发送,并支持 HTML 模板、附件、流以及多种传输方式(Gmail、Yandex、SendGrid 等)。由于内置类型,该库与 TypeScript 完全兼容。
为什么需要 Nodemailer?
在现代 Web 开发中,发送电子邮件用于:
- 注册确认(验证)
- 密码重置
- 通知和邮件群发
- 系统警报
Nodemailer 通过为任何邮件服务提供统一的 API 来简化此过程。
安装
npm install nodemailernpm install -D @types/nodemailer对于 TypeScript,请务必安装包含类型的包。
主要功能
- SMTP 传输 — 通过任何 SMTP 服务器发送(Gmail、Mail.ru、Yandex、AWS SES)。
- HTML 和文本 — 支持纯文本和 HTML 邮件。
- 附件 — 文件、图片、Buffer、流。
- 模板化 — 与 handlebars、pug 等集成。
- 流 — 发送大文件而无需加载到内存。
- 连接池 — 提高批量发送时的性能。
TypeScript 代码示例
import nodemailer from 'nodemailer';
interface MailOptions { to: string; subject: string; text?: string; html?: string;}
async function sendEmail(options: MailOptions): Promise<void> { // 创建传输对象(以 Gmail 为例) const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'your-email@gmail.com', pass: 'your-app-password' } });
// 邮件设置 const mailData = { from: 'your-email@gmail.com', to: options.to, subject: options.subject, text: options.text || '', html: options.html || undefined };
// 发送 const info = await transporter.sendMail(mailData); console.log('邮件已发送:', info.messageId);}
// 使用sendEmail({ to: 'user@example.com', subject: '来自 TypeScript 的问候!', html: '<h1>欢迎</h1><p>这是一封测试邮件。</p>'});何时使用 Nodemailer
该库适用于:
- 任何需要发送电子邮件的 Node.js/TypeScript 项目。
- 原型和 MVP — 通过 Gmail 快速设置。
- 生产系统 — 使用事务性服务(SendGrid、Mailgun)。
- 微服务和 serverless(Lambda、Cloud Functions)。
不建议使用 Nodemailer 进行批量垃圾邮件发送——为此有专门的 ESP(电子邮件服务提供商)。
结论
Nodemailer 是一个成熟、稳定且文档完善的库。借助 TypeScript 类型,您可以在编译阶段获得自动补全和错误检查。这是在 JavaScript/TypeScript 生态系统中发送电子邮件的理想选择。