如何使用 Node.js 发送电子邮件?
电子邮件是一种广泛使用的在人与人之间传递/交换消息的方法。我们通常使用任何软件或应用程序发送电子邮件,例如 Gmail、Outlook、Thunderbird 邮件和 yahoo 等。我们还可以使用任何可以与之交互的第三方库在 node.js 应用程序中编写这些应用程序的基本概念网络系统并发送电子邮件。
Nodemailer:有多种模块可用于发送电子邮件,但 nodemailer 是最流行的一个,它为我们提供了简单的程序和功能来发送邮件。
Nodemailer的特点:
- 它支持各种功能,例如在邮件中添加 HTML、Unicode字符、发送带有文本的附件等。
- 它使用简单邮件传输协议 (SMTP)。以下是将这个模块集成到我们的应用程序中的分步方法。
第 1 步:模块安装:在终端中编写命令以安装 nodemailer,然后在您的 nodejs 应用程序顶部导入。
npm install nodemailer
现在我们准备将其导入我们的应用程序。
const nodemailer = require('nodemailer');
第二步:创建Transporter对象:在nodemailer中有一个createTransport方法,它接受一个带有一些配置的对象,最后返回一个transporter对象。稍后将需要此对象来发送电子邮件。
const transporter = nodemailer.createTransport(transport[, defaults]);
在这里,我们将Gmail 用作服务仅用于示例目的,尽管 nodemailer 可以轻松地与任何其他邮件服务集成。在 Gmail 中,我们可以降低我们的帐户安全性,也可以使用 Oauth2 安全身份验证,除非通常 google 不允许通过 node.js 发送任何邮件。
不太安全的帐户:访问此链接可降低您的帐户的安全性,这样做后,我们可以仅使用您的 Gmail 帐户的用户名和密码创建我们的工作传输器对象。
app.js
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD
}
});
app.js
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD,
clientId: secure_configuration.CLIENT_ID,
clientSecret: secure_configuration.CLIENT_SECRET,
refreshToken: secure_configuration.REFRESH_TOKEN
}
});
Javascript
const mailConfigurations = {
// It should be a string of sender email
from: 'mrtwinklesharma@gmail.com',
// Comma Separated list of mails
to: 'smtwinkle451@gmail.com',
// Subject of Email
subject: 'Sending Email using Node.js',
// This would be the text of email body
text: 'Hi! There, You know I am using the'
+ ' NodeJS Code along with NodeMailer '
+ 'to send this email.'
};
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com, anyothergmailid@gmail.com',
subject: 'Sending Email using Node.js',
text: 'Hi! There, You know I am using the NodeJS Code'
+ ' along with NodeMailer to send this email.'
};
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
html: "Hi! There
This HTML content is
being send by NodeJS along with NodeMailer.
"
};
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
text:'Attachments can also be sent using nodemailer',
attachments: [
{
// utf-8 string as an attachment
filename: 'text.txt',
content: 'Hello, GeeksforGeeks Learner!'
},
{
// filename and content type is derived from path
path: '/home/mrtwinklesharma/Programming/document.docx'
},
{
path: '/home/mrtwinklesharma/Videos/Sample.mp4'
},
{
// use URL as an attachment
filename: 'license.txt',
path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
}
]
};
Javascript
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
app.js
const nodemailer = require('nodemailer');
const secure_configuration = require('./secure');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD,
clientId: secure_configuration.CLIENT_ID,
clientSecret: secure_configuration.CLIENT_SECRET,
refreshToken: secure_configuration.REFRESH_TOKEN
}
});
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
text: 'Hi! There, You know I am using the NodeJS '
+ 'Code along with NodeMailer to send this email.'
};
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
使用 Oauth2:根据官方文档,我们需要提供客户端 ID、客户端密码、刷新令牌和访问令牌以及用户名和密码。按照分步方法从谷歌云控制台获取这些配置。
1. 打开 Google Cloud Console:在这一步中,我们将获取我们的客户端 ID 和客户端密码。访问谷歌云控制台网站并自行注册/登录。然后从最左边的导航栏进入API & Services部分。现在查看仪表板并创建一个项目。在此之后,访问 Oauth 同意屏幕以在此步骤中注册您的应用程序,确保选择外部用户类型并添加一些/一个测试用户。在此步骤之后,转到凭据部分并单击创建凭据,然后选择 Oauth2 ClientID 并选择应用程序类型作为 Web 应用程序,还要确保将重定向 URI 添加为 OAuth 游乐场(从此处复制链接)。最后,您将成功获得您的client_id 和client_secret。
2. 打开 Oauth2 Playground:这里我们将获取我们的刷新令牌和访问令牌。访问 OAuth2 游乐场,单击右侧的 oauth2.0 配置图标,然后选中使用您自己的凭据复选框,并提供您从云控制台获得的相同客户端 ID 和密码。现在选择 Gmail API 进行授权。单击 Authorize API,然后使用您在上一步的凭据部分中作为测试用户填写的相同 Gmail id 对其进行授权。最后,单击令牌的交换授权码,这将提供刷新令牌和访问令牌。
注意:我们建议您在单独的选项卡中打开这些 gif,并分别遵循这两种方法,不要跳过任何跨度,这样可以避免很多混乱,也不要尝试复制此客户端 ID 和客户端密码等.它不会工作。
应用程序.js
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD,
clientId: secure_configuration.CLIENT_ID,
clientSecret: secure_configuration.CLIENT_SECRET,
refreshToken: secure_configuration.REFRESH_TOKEN
}
});
有了这个,我们的传输器对象就准备好了,现在我们可以发送我们的电子邮件了。
第 3 步:配置电子邮件:在发送邮件之前,我们必须创建一些消息配置,例如发送什么、发送到哪里等。创建这些配置非常容易,有几个键值对,您可以从中提供所需的以及预定义键的一些其他值。
向一封电子邮件发送简单的文本:
Javascript
const mailConfigurations = {
// It should be a string of sender email
from: 'mrtwinklesharma@gmail.com',
// Comma Separated list of mails
to: 'smtwinkle451@gmail.com',
// Subject of Email
subject: 'Sending Email using Node.js',
// This would be the text of email body
text: 'Hi! There, You know I am using the'
+ ' NodeJS Code along with NodeMailer '
+ 'to send this email.'
};
输出:如果我们发送带有这些配置的电子邮件,类似这样的内容将被发送给接收者。虽然我们的代码目前还不完整,但这里我们只是向您展示了当代码完成时这个消息配置的样子。
发送到多封电子邮件:我们可以用逗号作为分隔符连接更多电子邮件。
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com, anyothergmailid@gmail.com',
subject: 'Sending Email using Node.js',
text: 'Hi! There, You know I am using the NodeJS Code'
+ ' along with NodeMailer to send this email.'
};
发送一些 HTML 内容:只需将纯文本替换为 HTML 并将其提供给html键。
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
html: "Hi! There
This HTML content is
being send by NodeJS along with NodeMailer.
"
};
输出:
- 发送一些附件, Nodemailer 在发送附件时非常灵活,您可以发送电子邮件服务接受的任何类型的文件。
Javascript
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
text:'Attachments can also be sent using nodemailer',
attachments: [
{
// utf-8 string as an attachment
filename: 'text.txt',
content: 'Hello, GeeksforGeeks Learner!'
},
{
// filename and content type is derived from path
path: '/home/mrtwinklesharma/Programming/document.docx'
},
{
path: '/home/mrtwinklesharma/Videos/Sample.mp4'
},
{
// use URL as an attachment
filename: 'license.txt',
path: 'https://raw.github.com/nodemailer/nodemailer/master/LICENSE'
}
]
};
输出:
不仅这些,而且 nodemailer 有很多消息配置的可能性,你可以从这里检查它们。
步骤 4:发送电子邮件:使用上述任何一种方法处理传输器对象,然后选择任何一种电子邮件配置发送邮件。
在 transporter 对象中存在一个sendMail方法,该方法接受电子邮件配置和一个回调函数,该函数将在发送邮件时或由于错误而执行。
transporter.sendMail(mailConfigurations[, callback]);
Javascript
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
第5步:将它们全部结合起来
您可以从第 2 步和第 3 步中选择任何选项。将其提供给 sendMail 方法后,您将能够成功地使用 node.js 发送电子邮件。
说明:这里我们一开始导入了nodemailer模块,然后使用了Oauth2类型的认证,后面是最基本的消息配置。最后是sendMail方法 正在向消息配置中提供的接收者发送邮件。
注意:- 导入的安全模块与这个 nodemailer 无关,我只是用它来保护我的凭据。
应用程序.js
const nodemailer = require('nodemailer');
const secure_configuration = require('./secure');
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: secure_configuration.EMAIL_USERNAME,
pass: secure_configuration.PASSWORD,
clientId: secure_configuration.CLIENT_ID,
clientSecret: secure_configuration.CLIENT_SECRET,
refreshToken: secure_configuration.REFRESH_TOKEN
}
});
const mailConfigurations = {
from: 'mrtwinklesharma@gmail.com',
to: 'smtwinkle451@gmail.com',
subject: 'Sending Email using Node.js',
text: 'Hi! There, You know I am using the NodeJS '
+ 'Code along with NodeMailer to send this email.'
};
transporter.sendMail(mailConfigurations, function(error, info){
if (error) throw Error(error);
console.log('Email Sent Successfully');
console.log(info);
});
输出:使用 node 命令运行此代码段,这将是控制台和 Gmail 收件箱中的输出。