• Node.js Video Tutorials

Node.js - 发送邮件



发送邮件是任何 Node.js 应用程序(特别是 Express 应用程序)中所需的功能之一。NPM 仓库中有各种第三方模块可以实现此功能。Node.js 应用程序可以通过 Mailgun、MailTrap、Mailjet 等电子邮件 API 集成电子邮件功能。

在本章中,我们将学习如何使用 nodemailer 模块和 MailTrap API 发送电子邮件。

Nodemailer

Nodemailer 是一个使 Node.js 应用程序能够发送电子邮件的模块。您可以发送纯文本和 HTML 内容的电子邮件。它还支持添加附件、安全的 TLS 传输、内置 SMTP 支持、OAUTH2 身份验证以及许多其他功能。

首先,安装 nodemailer 模块。

npm install nodemailer

为了测试我们的支持电子邮件的 Node.js 应用程序,我们将使用 Mailtrap 服务,它提供一个虚拟 SMTP 服务器。当应用程序进入生产阶段时,您可以使用真实的 SMTP 服务器 URL。创建一个 Mailtrap 帐户,并从仪表板的“集成”下拉菜单中获取 API 凭据,选择 Nodemailer。

SMTP Server

将以上代码与下面提供的其余代码一起保存 -

const nodemailer = require('nodemailer');
var transport = nodemailer.createTransport({
   host: "sandbox.smtp.mailtrap.io",
   port: 2525,
   auth: {
      user: "f924c******a56",
      pass: "******1b5516a0"
   }
});

message = {
   from: "[email protected]",
   to: "[email protected]",
   subject: "Subject",
   text: "Hello SMTP Email"
}
transport.sendMail(message, function(err, info) {
   if (err) {
      console.log(err);
   } else {
   console.log(info);
   }
});

Nodemailer 的 createTransport 函数指定您要使用哪种方法发送电子邮件。它将连接数据和凭据作为参数。在本例中,由于 SMTP 是首选传输方式,您需要定义一个 SMTP 主机、端口和用于访问主机 SMTP 服务器的凭据密码。

createTrsnsport() 函数返回一个传输对象。它的 sendMail() 方法使用凭据和消息详细信息并将消息发送到所需的收件人。按如下方式运行上述代码 -

PS D:\nodejs\emailapp> node main.js
{
   accepted: [ '[email protected]' ],
   rejected: [],
   ehlo: [
      'SIZE 5242880',
      'PIPELINING',
      'ENHANCEDSTATUSCODES',
      '8BITMIME',
      'DSN',
      'AUTH PLAIN LOGIN CRAM-MD5'
   ],
   envelopeTime: 749,
   messageTime: 529,
   messageSize: 291,
   response: '250 2.0.0 Ok: queued',
   envelope: { from: '[email protected]', to: [ '[email protected]' ] },
   messageId: '<[email protected]>'
}

MailTrap 提供的虚拟 SMTP 服务器为您提供了一个收件箱,可以在其中验证电子邮件事务。

Mail Trap

您还可以使用流行的 Gmail 服务通过您的 Node.js 代码发送电子邮件。请注意,您可能需要启用 Gmail 帐户的“安全性较低的应用”设置,或者如果帐户使用 OAuth2 身份验证,则使用身份验证令牌。

var transport = nodemailer.createTransport({
   service: 'gmail',
   auth: {
      user: '[email protected]',
      pass: 'yourpassword'
   }
});

Mailgun

您还可以使用 Mailgun API 密钥在您的 Node.js 应用程序中集成电子邮件功能。要添加此功能,请安装以下模块:

npm i mailgun.js form-data

访问 URL signup.mailgun.com 注册免费 Mailgun 帐户并获取公共和私有 API 密钥。

然后,我们初始化 Mailgun 客户端实例并传入 MAILGUN_API_KEY。然后我们定义了一个 sendMail 函数来处理使用 mailgun-js 库发送电子邮件。

const formData = require("form-data");
const Mailgun = require("mailgun.js");

const mailgun = new Mailgun(formData);

const mg = mailgun.client({
   username: "api",
   key: process.env.MAILGUN_API_KEY,
});
exports.sendMail = (req, res) => {
   const { toEmail, fromEmail, subject, message } = req.body;

      mg.messages.create(process.env.MAILGUN_DOMAIN, {
      from: fromEmail,
      to: [toEmail],
      subject: subject,
      text: message,
   });
};
广告