Node.js邮件发送指南:使用NodeMailer发送和接收邮件
本文将指导您如何使用Node.js发送和接收邮件,并解决常见问题。NodeMailer是流行的npm模块,每周下载量超过三百万次,但需要SMTP服务器支持。
核心要点:
发送邮件
大多数Web应用程序都需要发送邮件,例如注册、密码重置、状态报告以及完整的营销活动(如新闻通讯和促销活动)。本教程讲解如何在Node.js中发送邮件,其中的概念和挑战也适用于其他系统。
您可以在npm上找到许多与电子邮件相关的模块。最受欢迎的是NodeMailer。
使用NodeMailer需要一个SMTP服务器来发送邮件。您可以使用自己的电子邮件提供商,但本演示使用免费的WPOven Test SMTP Server。
<code class="language-bash">mkdir emailtest cd emailtest</code>
<code class="language-json">{ "name": "emailtest", "type": "module", "main": "index.js", "dependencies": { "nodemailer": "^6.0.0" } }</code>
<code class="language-bash">npm install</code>
<code class="language-javascript">import nodemailer from 'nodemailer'; const transporter = nodemailer.createTransport({ host: 'smtp.freesmtpservers.com', port: 25 }); try { const send = await transporter.sendMail({ from: '"测试邮件" <test>', to: 'your_email@example.com', subject: '你好!', text: '你好,世界!', html: '<p>你好,世界!</p>', }); console.dir(send, { depth: null, color: true }); } catch (e) { console.dir(e, { depth: null, color: true }); }</test></code>
(请将to:
地址更改为您自己的邮箱地址)
运行代码后,您应该会看到包含250 OK响应和messageId的结果。在WPOven Test SMTP Server页面输入您的邮箱地址,点击“Access Inbox”,查看“你好!”邮件。
NodeMailer基础
要发送邮件,您必须创建一个NodeMailer transporter 对象来定义服务类型。SMTP是最常见的,但其他服务也可用。通常需要身份验证用户ID和密码:
<code class="language-javascript">import nodemailer from 'nodemailer'; const transporter = nodemailer.createTransport({ host: 'smtp.yourserver.com', port: 587, auth: { user: 'myid@yourserver.com', pass: 'my-password' }, });</code>
您可以使用transporter的sendMail()
方法向一个或多个收件人发送邮件:
<code class="language-javascript">const send = await transporter.sendMail({ from: '"测试邮件" <test>', to: 'someone@example.com, sometwo@example.com', cc: 'somethree@example.com', bcc: 'somefour@example.com', subject: '你好!', text: '纯文本邮件内容', html: '<p>HTML邮件内容</p>', });</test></code>
所有邮件客户端都支持纯文本消息。当邮件客户端支持HTML时,您还可以发送相同消息的富格式版本(详情见下文)。
NodeMailer提供了许多其他消息选项,但最常见的是附件。一个对象数组定义文件名和内容。例如:
<code class="language-bash">mkdir emailtest cd emailtest</code>
发送服务及异步架构
虽然发送单个邮件通常很快,但SMTP服务器可能宕机需要重试,或者邮件可能卡在批量邮件发送的中间。
最好将数据发送到任务队列,而不是直接在Node.js应用程序中发送邮件。最终用户无需等待响应,可以继续使用应用程序。另一个进程可以监控邮件队列,发送下一条邮件,并在发生故障时重新排队项目。
制作HTML邮件
HTML5和CSS3在现代浏览器中运行良好,但邮件客户端则不然。您将面临以下问题:
手动编写HTML邮件很困难。建议使用以下工具和资源:
读取收到的邮件
大多数应用程序只需要发送邮件,但有时您可能需要检查收到的邮件(例如服务注册、取消订阅处理、自动化支持等)。虽然超出了本教程的范围,但ImapFlow等Node.js模块允许您的应用程序连接到IMAP收件箱,获取邮件并处理响应:
<code class="language-json">{ "name": "emailtest", "type": "module", "main": "index.js", "dependencies": { "nodemailer": "^6.0.0" } }</code>
结论
从Node.js Web应用程序发送邮件很容易,但发送在所有邮件客户端中都能正常显示、可靠运行且不会导致垃圾邮件问题的邮件则要困难得多。建议您从简单的纯文本邮件开始。
常见问题解答
(此处省略了原文档中冗长的FAQ部分,因为这些问题在上面已经基本涵盖了。如有需要,可以根据具体问题补充。)
以上是使用node.js发送电子邮件的详细内容。更多信息请关注PHP中文网其他相关文章!