如何使用nodejs自动发送邮件?

徐小夕 等级 523 0 0
标签: nodehttps前端

之前用Nodejs做了很多服务端模块, 最近抽空复盘一下, 接下来笔者将介绍如何使用Nodejs来自动向用户发送邮件.

笔者将详细介绍自动发送邮箱的实现方案, 以及通过一个实际的案例来带大家掌握使用nodejs自动发送邮件, 最后会介绍一些实际的应用场景, 来加深对该方案的理解, 达到学以致用的目的.

实现方案

实现自动发送邮件笔者采用了基于Nodejs生态的nodemailer, 它可以轻松的帮我们发送电子邮件, 官网地址: nodemailer.

如何使用nodejs自动发送邮件?

之所以选择nodemailer是因为它提供了非常灵活的自定义配置和安全保障, 比如:

  • 具有零依赖关系的单一模块, 代码容易审核,没有死角
  • Unicode支持使用任何字符,包括表情符号💪
  • 邮件内容既支持普通文本, 还支持自定义html
  • 支持自定义附件
  • 支持安全可靠的SSL/STARTTLS邮件发送
  • 支持自定义插件处理邮件消息

还有很多特点笔者就不一一介绍了. 接下来我们来看一个笔者简化并翻译的官网案例:

"use strict";
const nodemailer = require("nodemailer");

// 使用async..await 创建执行函数
async function main() {
  // 如果你没有一个真实邮箱的话可以使用该方法创建一个测试邮箱
  let testAccount = await nodemailer.createTestAccount();

  // 创建Nodemailer传输器 SMTP 或者 其他 运输机制
  let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email", // 第三方邮箱的主机地址
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
      user: testAccount.user, // 发送方邮箱的账号
      pass: testAccount.pass, // 邮箱授权密码
    },
  });

  // 定义transport对象并发送邮件
  let info = await transporter.sendMail({
    from: '"Dooring 👻" <dooring2021@163.com>', // 发送方邮箱的账号
    to: "bar@example.com, baz@example.com", // 邮箱接受者的账号
    subject: "Hello Dooring", // Subject line
    text: "H5-Dooring?", // 文本内容
    html: "欢迎注册h5.dooring.cn, 您的邮箱验证码是:<b>${emailCode}</b>", // html 内容, 如果设置了html内容, 将忽略text内容
  });
}

main().catch(console.error);

以上代码是发送带有纯文本和HTML正文的电子邮件的完整示例. 笔者在代码上做了详细的翻译, 我们可以总结出要想发送邮件, 我们需要如下3个步骤:

  • 创建Nodemailer传输器 SMTP 或者其他运输机制
  • 设置 Message 选项(将什么消息发送给谁)
  • 使用先前创建的传输器的sendMail()方法传递消息对象

宏观的使用流程我们知道了, 接下来我们落实到每一个技术功能点来实现.我们需要关注如下几个核心点:

  • 如何设置 host
  • 如何设置 auth
  • 如何配置 Message 选项

解答了以上3个问题, 我们就能灵活的使用Nodemailer发送自定义邮件了.

如何设置host, port, secure

这里笔者拿网易邮箱来举例. 比如我们想用我们自己的网易邮箱给用户发送邮件, 我们需要先注册一个用于发送邮件的网易邮箱, 比如dooring2021@163.com. 由于我们采用SMTP传输器 , 所以在邮箱主页我们找到如下选项并设置:

如何使用nodejs自动发送邮件?

在该页面下方我们可以找到对应的host, 如下:

如何使用nodejs自动发送邮件?

关于portsecure, 我们采用默认配置即可, 设置securetrue,表示端口默认使用465. 详细配置如下:

如何使用nodejs自动发送邮件?

如何设置auth

auth我们在上一步的操作中已经涉及到了, 我们在开启IMAP/SMTP服务时会提示保存邮箱授权码, 这里的授权码就是auth.pass的值, auth.user表示当前授权的邮箱.

如何设置Message

消息配置是我们邮箱服务比较重要的部分, 官方提供了如下几个配置说明:

如何使用nodejs自动发送邮件? 这里笔者给大家详细介绍一下:

  • from 发件人的电子邮件地址。所有电子邮件地址都可以是纯'sender@server.com“或格式化”‘发送者名称’sender@server.com'
  • to 逗号分隔的列表或收件人的电子邮件地址的排列
  • cc 逗号分隔的列表或将显示在“抄送”字段中的收件人电子邮件地址数组
  • bcc 逗号分隔的列表或将显示在“密件抄送:”字段中的收件人电子邮件地址数组
  • subject 电子邮件的主题
  • text 消息的文本内容
  • html 消息的html内容, 如果定义了html, 将忽略text
  • attachments 附件内容

熟悉了以上配置之后我们基本可以配置满足80%场景的邮件发送需求了. 这里我们来看一个设置Message的简单案例:

await transporter.sendMail({
  from: '"v6.dooring" <dooring2021@163.com>', // sender address
  to: 'xujiang156@qq.com', // list of receivers
  subject: 'welcome to use dooring', // Subject line
  text: 'Hello world?', // plain text body
  html: `欢迎注册v6.dooring, 您的邮箱验证码是:<b>${emailCode}</b>`, // html body
})

该案例是使用dooring邮箱给一个普通用户发送邮箱验证码的场景, 是不是很熟悉呢? 这个场景目前被应用在很多登录注册相关的场景中. 接下来看看实际的效果:

如何使用nodejs自动发送邮件?

扩展

我们利用Nodemailer可以开发很多有意思的产品, 比如:

  • 在线邮箱客户端
  • 定制邮箱模版
  • 邮箱验证中枢系统
  • 邮箱群发助手

等等. 关于第二个应用场景, 目前开源有很多漂亮的邮箱模版, 比如

如何使用nodejs自动发送邮件?

最后

目前笔者也在持续更新H5编辑器 H5-Dooring, 近期更新如下:

  • 添加省市级联组件
  • 添加批量导入 excel 数据的能力
  • 添加表单自定义校验
  • 音频组件添加自动播放控制, 循环播放等配置项
  • 添加横向滑动组件
  • 增加表单设计器的文件上传功能
  • 增加大转盘抽奖组件
  • 增加九宫格抽奖组件
  • 增加组件权限控制
  • 增加图片库自定义上传功能

觉得有用 ?喜欢就收藏,顺便点个吧,你的支持是我最大的鼓励!微信搜 “趣谈前端”,发现更多有趣的H5游戏, webpack,node,gulp,css3,javascript,nodeJS,canvas数据可视化等前端知识和实战.

收藏
评论区

相关推荐

pm2 使用心得
pm2(https://link.jianshu.com?thttps://github.com/foreverjs/forever)和forever(https://link.jianshu.com?thttps://github.com/foreverjs/forever)是启动Nodejs服务常用到的两个工具。使用这两个指令可以使node服
使用nodeJs开发自己的图床应用
前言 本文主要复盘笔者的nodeJS,通过一个线上的实战案例来总结node生态常用的技术点和最佳实践。后面会花费大概一个月的时间输出3篇以实战为主的nodeJs项目,本文是第一篇,主要介绍如何使用nodeJs开发一个图床应用。该项目对于测试和个人服务型网站非常实用,大家可以基于此扩展出更强大的应用。本文的图床项目主要使用Koa进行开发,不熟悉的可以先研究一下
pm2 基础使用
pm2(https://github.com/foreverjs/forever)和forever(https://github.com/foreverjs/forever)是启动Nodejs服务常用到的两个工具。使用这两个指令可以使node服务在后台运行(类似于linux的nohup),另外它们可以在服务因异常或其他原因被杀掉后进行自动重启。 由于
nodejs打包成为exe可执行文件
nodejs打包成为exe可执行文件需要将nodejs写的项目运行到客户机上,客户机可能没有node环境,所以需要将其打包目前上手使用的是pkg npm install pkg g生成exe文件,window环境 pkg t win d:/index.js o index.exe https://github.com/zeit/pkgfetch/releas
Windows环境下轻松搭建NodeJs服务器
大家好,我是皮皮,今天给大家分享一些好玩的 前言Nodejs是GoogleV8引擎的一个JavaScript脚本语言,实际上也就是相当于服务器一样,可以解析网页内容并产生效果。它的出现令JavaScript如虎添翼,而且Node比JavaScript执行更为快速,并且支持分布式,因为它使用了事件驱动型的非阻塞式的模型。说太多反而没意思,不如我们自己搭建一个。
ubuntu linux 12.04 下nodejs开发环境的配置
废话不说,步入正题 环境: ubuntu 12.04 64位 **为了不受权限问题影响,我选择的是直接使用root帐号** 下载 nodeJS >> wget http://nodejs.org/dist/v0.10.26/node-v0.10.24.tar.gz 于是你可以在你的当前目录下找到 node-v0.10.24.
ElasticSearch5.0 插件 Head 安装
ES5.0 head原理是独自运行一个程序,提供以前head插件提供的功能。所以ES中不必再安装head插件,取而代之的是head的代码(JS)独立运行在外部,包括其他非ES的服务器上。   **1.下载相关安装介质:**     head download url: https://github.com/mobz/elasticsearch-hea
Express+Socket.IO 搭建即时聊天
  技术栈是:nodejs express socketio bootstrap sqlite   由于初学,代码排版模块化实现的不好,只是提供了一个功能。  源码地址: [https://github.com/Qquanwei/Wire](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2
Javascript开发人员偏爱Deno而不是Node的5大原因
![](https://oscimg.oschina.net/oscnet/2f078ca0f30b400261bf865253aa28f0a40.jpg) NodeJS的作者Ryan Dahl发布了一个新的运行时,旨在解决Node的许多缺点。你最初的反应可能是“哦,太棒了,另一个Javascript框架?正是我所需
Linux下Nodejs安装之Hello World
去官网下载安装包 node-v0.12.7.tar.gz 1.mkdir /usr/local/nodejs 2.tar -zvxf node-v0.12.7.tar.gz 3\. cd node-v0.12.7.tar.gz 4\. ./configure --prefix=/usr/local/nodejs 5.make && make ins
Linux常用环境安装
### **node环境安装**  更新ubuntu软件源 sudo apt-get update  安装nodejs sudo apt-get install nodejs sudo apt install nodejs-legacy sudo apt install npm 更新npm源
Node.js学习路线图
Node.js学习路线图 ------------ [从零开始nodejs系列文章](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fblog.fens.me%2Fseries-nodejs%2F),将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs
NodeJs在Centos 6.5上部署
环境Centos 6.5 1. 安装NodeJs 和npm sudo yum install nodejs npm --enablerepo=epel 参考:[查看](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2Fjoyent%2
NodeJs在windows上安装配置测试
Node.js简介 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。 安装环境 本机系统:Windo
Nodejs支持VC++Build
**Nodejs(v0.5.5)开始支持VC++Build了** **Building with VC++** There is increasing support for native compilation on Windows using VC++ (Visual C++). This includes Visual C++ Express wh