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

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器