JavaScript (Node.js) 发送电子邮件:完整指南
发送电子邮件是任何现代 Web 应用程序的关键功能之一。无论是通知、注册确认、邮件群发还是密码重置,能够以编程方式发送电子邮件是每位开发者的必备技能。在本材料中,我们将详细介绍如何使用流行的库、SMTP 设置和最佳实践,在 JavaScript (Node.js) 中组织电子邮件发送。
为什么要在 Node.js 中发送电子邮件?
Node.js 是一个异步 JavaScript 运行时环境,非常适合处理大量请求。通过 Node.js 发送邮件可以:
- 自动化用户通知;
- 将邮件群发与后端集成;
- 实时处理发送错误;
- 为整个项目使用同一种语言 (JavaScript)。
Node.js 中发送电子邮件的主要库
目前有几种经过验证的库。让我们看看最流行的:
1. Nodemailer
Nodemailer 是 Node.js 中发送电子邮件的事实标准。该库支持 SMTP、内置模板、附件、HTML 邮件和 OAuth2。它是免费的,不需要外部服务。
// 安装:npm install nodemailerconst nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({ host: 'smtp.example.com', port: 587, secure: false, // 对于 465 端口为 true auth: { user: 'user@example.com', pass: 'your-password' }});
async function sendMail() { const info = await transporter.sendMail({ from: '"发件人" <from@example.com>', to: 'to@example.com', subject: '来自 Node.js 的问候', text: '这是一封测试邮件。', html: '<b>这是一封测试邮件。</b>' }); console.log('邮件已发送:', info.messageId);}sendMail().catch(console.error);2. SendGrid(通过 @sendgrid/mail)
SendGrid 是 Twilio 提供的云邮件群发服务。@sendgrid/mail 库允许通过 SendGrid API 轻松发送邮件。适用于大规模项目。
// 安装:npm install @sendgrid/mailconst sgMail = require('@sendgrid/mail');sgMail.setApiKey('YOUR_SENDGRID_API_KEY');
const msg = { to: 'recipient@example.com', from: 'sender@example.com', subject: '通过 SendGrid 发送', text: '来自 SendGrid 的问候!', html: '<strong>来自 SendGrid 的问候!</strong>'};
sgMail.send(msg) .then(() => console.log('邮件已发送')) .catch(error => console.error(error));3. Mailgun.js
Mailgun 是另一个面向开发者的流行服务。mailgun.js 库提供了一个方便的接口来发送邮件和管理邮件群发。
// 安装:npm install mailgun.jsconst formData = require('form-data');const Mailgun = require('mailgun.js');const mailgun = new Mailgun(formData);
const mg = mailgun.client({ username: 'api', key: 'YOUR_MAILGUN_API_KEY'});
mg.messages.create('sandbox.mailgun.org', { from: 'Mailgun Sandbox <postmaster@sandbox.mailgun.org>', to: ['recipient@example.com'], subject: '来自 Mailgun 的问候', text: '通过 Mailgun 发送的测试邮件。'}).then(msg => console.log(msg)).catch(err => console.error(err));配置 SMTP 发送电子邮件
如果您使用自己的邮件服务器或 Gmail/Yandex 账户,则需要配置 SMTP。以下是 Gmail 的示例:
const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'your@gmail.com', pass: 'your-app-password' // 使用应用密码 }});