📜  如何使用 Node.js 发送电子邮件?

📅  最后修改于: 2022-05-13 01:56:39.125000             🧑  作者: Mango

如何使用 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 收件箱中的输出。