[ Nodemailer ] 使用 Nodemailer 在node中收发电子邮件

907 阅读2分钟

Nodemailer

Nodemailer是一个简单易用的Node.js邮件发送组件

官网地址:nodemailer.com

GitHub地址:github.com/nodemailer/…

Nodemailer的主要特点包括:
支持Unicode编码
支持Window系统环境
支持HTML内容和普通文本内容
支持附件(传送大附件)
支持HTML内容中嵌入图片
支持SSL/STARTTLS安全的邮件发送
支持内置的transport方法和其他插件实现的transport方法
支持自定义插件处理消息
支持XOAUTH2登录验证

安装使用

1、下载安装插件

执行命令:npm install nodemailer --save

2、官方示例

"use strict";
const nodemailer = require("nodemailer");
// async..await is not allowed in global scope, must use a wrapper
async function main() {
  // Generate test SMTP service account from ethereal.email
  // Only needed if you don't have a real mail account for testing
  let testAccount = await nodemailer.createTestAccount();
  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
      user: testAccount.user, // generated ethereal user
      pass: testAccount.pass, // generated ethereal password
    },
  });
  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Fred Foo" <foo@example.com>', // sender address
    to: "bar@example.com, baz@example.com", // list of receivers
    subject: "Hello", // Subject line
    text: "Hello world?", // plain text body
    html: "Hello world? ", // html body
  });
  console.log("Message sent: %s", info.messageId);
  console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
}
main().catch(console.error);

应用实例

1、获取授权码

这里我使用QQ邮箱对外发送邮件,首先生成授权码

2、开启一个SMTP连接池

const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');  
// 开启一个 SMTP 连接池
const transport = nodemailer.createTransport(smtpTransport({
  host: "smtp.qq.com", // qq邮箱主机
  secure: true, // 使用 SSL
  secureConnection: true, // 使用 SSL
  port: 465, // SMTP 端口 或者587
  auth: {
    user: "example@foxmail.com", // 账号:域名邮箱账号
    pass: "SMPT获取的密码" // 密码:SMPT获取的密码
  }
}));

3、发送邮件方法

const sendEmail = ({email, content, key, post = '', link = '', m_content}) => { 
  // 设置邮件内容
  const htmlStr = '可以自定义邮件模板';
  const mailOptions = {
    from: "kayrain.sun@foxmail.com", // 发件地址
    to: email, // 收件列表
    subject: "来自KBlog的回复", // 标题
    text: "",
    html: htmlStr // html 内容
  } 
  return new Promise((resolve, reject) => {
    transport.sendMail(mailOptions, function (error, response) { 
      if (error) {
        console.log("邮件发送失败: " + error);
        reject({
          status: 0,
          message: `邮件发送失败:${error}`
        }); 
      } else {
        resolve({
          status: 1,
          message: "邮件发送成功"
        }); 
      }
      // transport.close(); // 如果没用,关闭连接池
    });
  })
}

参考文章:Node.js使用Nodemailer发送邮件

源码地址:github.com/karainsun/M…