Nodemailer 库:在 JavaScript (Node.js) 中发送电子邮件
Nodemailer 是从 Node.js 应用程序发送电子邮件最流行的模块。它提供了一个简单但功能强大的 API,用于处理各种邮件服务(SMTP、Gmail、Outlook、SendGrid、Amazon SES 等)。该库支持 HTML 模板、附件、数据流以及加密(SSL/TLS)。
为什么需要 Nodemailer?
在现代 Web 开发中,发送电子邮件是一项基本功能:注册邮件、密码重置、通知、群发邮件。Nodemailer 解决了以下问题:
- 与任何 SMTP 服务器的通用协作。
- 支持 HTML 和文本消息。
- 附件文件(图片、PDF、压缩包)。
- 大数据流的传输。
- 与流行服务(Gmail、Yandex、Mail.ru)集成。
安装
通过 npm 安装模块:
npm install nodemailer对于 TypeScript 额外安装:
npm install @types/nodemailer主要功能
- createTransport() — 创建用于连接邮件服务器的传输对象。
- sendMail() — 使用设置(发件人、收件人、主题、正文、附件)发送邮件。
- verify() — 检查与服务器的连接。
- use() — 连接插件(例如,用于模板化)。
Node.js 代码示例
const nodemailer = require('nodemailer');
// 配置传输对象(以 Gmail 和 App Password 为例)const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'your-email@gmail.com', pass: 'your-app-password' // 不是普通密码,而是应用专用密码 }});
// 发送邮件的函数async function sendEmail() { try { const info = await transporter.sendMail({ from: '"Your Name" <your-email@gmail.com>', to: 'recipient@example.com', subject: '来自 Node.js 的问候!', html: '<h1>测试邮件</h1><p>通过 Nodemailer 发送。</p>' }); console.log('邮件已发送: %s', info.messageId); } catch (error) { console.error('发送错误:', error); }}
sendEmail();何时使用 Nodemailer?
- 注册和授权 — 发送电子邮件确认邮件。
- 通知 — 关于用户操作(订单、评论)的提醒。
- 群发邮件 — 批量发送(但对于大量邮件,最好使用 SendGrid/Mailgun)。
- 调试 — 在本地环境中发送邮件(通过 Ethereal 或 Mailtrap)。
重要提示: 对于生产环境,请使用真实的 SMTP 服务器(SendGrid、Amazon SES、Mailgun)或配置您自己的邮件服务器。Gmail 有发送限制(每天 500 封邮件)并且需要应用专用密码。
Nodemailer 是在 Node.js 中发送电子邮件的事实标准。它简单、可靠,并且拥有庞大的社区。