首页 >web前端 >js教程 >使用node.js发送电子邮件

使用node.js发送电子邮件

Christopher Nolan
Christopher Nolan原创
2025-02-08 12:24:09166浏览

Sending Email Using 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。

  1. 创建项目:
<code class="language-bash">mkdir emailtest
cd emailtest</code>
  1. 创建package.json:
<code class="language-json">{
  "name": "emailtest",
  "type": "module",
  "main": "index.js",
  "dependencies": {
    "nodemailer": "^6.0.0"
  }
}</code>
  1. 安装NodeMailer:
<code class="language-bash">npm install</code>
  1. 编写index.js:
<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在现代浏览器中运行良好,但邮件客户端则不然。您将面临以下问题:

  • 各种邮件客户端渲染引擎不同。
  • 大多数客户端会阻止或限制字体、图像、跟踪器、媒体查询、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收件箱,获取邮件并处理响应:

<code class="language-json">{
  "name": "emailtest",
  "type": "module",
  "main": "index.js",
  "dependencies": {
    "nodemailer": "^6.0.0"
  }
}</code>

结论

从Node.js Web应用程序发送邮件很容易,但发送在所有邮件客户端中都能正常显示、可靠运行且不会导致垃圾邮件问题的邮件则要困难得多。建议您从简单的纯文本邮件开始。

常见问题解答

(此处省略了原文档中冗长的FAQ部分,因为这些问题在上面已经基本涵盖了。如有需要,可以根据具体问题补充。)

以上是使用node.js发送电子邮件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn