使用node.js发送电子邮件
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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

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

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
