大家好,欢迎来到IT知识分享网。
电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。
在很多项目中,我们都会遇到邮件注册,邮件反馈等需求。在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用。Nodemailer包就可以帮助我们快速实现发送邮件的功能。
Nodemailer简介
Nodemailer是Node.js应用程序的一个模块,是一个简单易用的Node.js邮件发送组件。可以轻松地发送电子邮件。该项目于2010年开始,当时没有合理的选项来发送电子邮件消息,今天它是大多数Node.js用户默认发送邮件的解决方案。
GitHub地址:https://github.com/nodemailer/nodemailer
Nodemailer的主要特点包括:
- 支持Unicode编码
- 支持Window系统环境
- 支持HTML内容和普通文本内容
- 支持附件(传送大附件)
- 支持HTML内容中嵌入图片
- 支持SSL/STARTTLS安全的邮件发送
- 支持内置的transport方法和其他插件实现的transport方法
- 支持自定义插件处理消息
- 支持XOAUTH2登录验证
准备工作
首先你需要准备一个邮箱!因为我们要做的是发送邮件的功能。所以准备的邮箱就是作为邮件发送方。
你可以这样理解(仅作为理解):Nodemailer 就是一个跑在你服务器上的程序,它的功能就是在一定条件发生时向某个邮箱发送邮件。因此需要注册一个邮箱作为发件方并把邮箱账号密码告诉Nodemailer (配置一个对象作为参数)。当一定条件发生时,Nodemailer 会根据你配置的账号密码登陆这个邮箱(在触发发邮件函数时,可以将接收方、邮件信息如标题、内容等作为参数传入),并根据传进来的信息进行发件操作。但是,在实际操作时,却没有这么直接。需要我们在配置账号密码之前,为你准备的邮箱开启POP3/SMTP服务。那么问题来了,什么是POP3/SMTP服务呢?
POP3 协议
POP 协议(Post Office Protocol,邮局协议)是一种允许用户从邮件服务器收发邮件的协议。它有2种版本,即POP2和POP3,都具有简单的电子邮件存储转发功能。POP2与POP3本质上类似,都属于离线式工作协议,但是由于使用了不同的协议端口,两者并不兼容。与 SMTP协议相结合,POP3是目前最常用的电子邮件服务协议。POP3除了支持离线工作方式外,还支持在线工作方式。
在离线工作方式下,用户收发邮件时,首先通过POP3客户程序登录到支持POP3协议的邮件服务器,然后发送邮件及附件;接着,邮件服务器将为该用户收存的邮件传送给POP3客户程序,并将这些邮件从服务器上删除;最后,邮件服务器将用户提交的发送邮件,转发到运行SMTP协议的计算机中,通过它实现邮件的最终发送。在为用户从邮件服务器收取邮件时,POP3是以该用户当前存储在服务器上全部邮件为对象进行操作的,并一次性将它们下载到用户端计算机中。一旦客户的邮件下载完毕,邮件服务器对这些邮件的暂存托管即告完成。使用POP3,用户不能对他们贮存在邮件服务器上的邮件进行部分传输。离线工作方式适合那些从固定计算机上收发邮件的用户使用。当使用POP3在线工作方式收发邮件时,用户在所用的计算机与邮件服务器保持连接的状态下读取邮件。用户的邮件保留在邮件服务器上。
SMTP协议
SMTP协议是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
说了一大堆,还有有点不明所以?有些深入了解http的同学可能会知道,http协议只是TCP/IP协议族中的一个协议,同时https协议处于网络模型的应用层。而应用层主要是提供网络任意端上应用程序之间的接口。而除了http/https,POP3/SMTP也处于应用层,除了这些还有DNS、FTP等协议。http协议我们都知道,是浏览器/客户端同服务器进行交互的一种通信协议。而POP3/SMTP就是邮件收发服务器进行交互的一种通信协议。这里就不展开了(其实再深入的我也不会),有兴趣的同学可以研究下。
回到主题,对于要开启POP3/SMTP服务你可以这样理解(仅作为理解):上面我们说过,当一定条件发生时,Nodemailer 会根据你配置的账号密码登陆这个邮箱。其实这样描述只是为了方便大家理解,Nodemailer 并没有做登陆操作。现在我们需要将刚刚的理解稍微改变一下。当我们使用某个邮箱(比如QQ邮箱),发送一封邮件给163邮箱。当我们点击发送按钮之后,腾讯的发件服务器会遵循SMTP通讯协议发送这封邮件,而网易的邮件接收服务器会遵循POP3协议接受这封邮件。但是现在我们要使用 Nodemailer 发送邮件,也就是现在发件服务器变成了 Nodemailer 程序所在的服务器,因此 我们在使用 Nodemailer 发邮件之前也要把当前服务器发邮件时要遵循的通信协议变成SMTP。
听起来很复杂有木有?但是实际操作起来却很简单。我们只需要设置下邮箱获取下授权码,并将其配置到 Nodemailer 中就好了。我准备的作为发件箱的邮箱是QQ邮箱,具体操作步骤如下:
打开邮箱,设置里找到:
点POP3/SMTP服务后面的开启:
然后会让你验证,验证通过后会给你一个授权码:
记好这个授权码,不要搞丢了。然后就需要在你的项目目录下安装 Nodemailer 。
npm install nodemailer -D
使用 nodemailer
首先在你的项目目录下新建一个send.js,内容如下:
const nodemailer = require('nodemailer'); //引入nodemailer
const transporter = nodemailer.createTransport({ //配置 nodemailer 服务
// host: 'smtp.qq.com', // SMTP服务器地址
service: 'qq', // 使用内置传输发送邮件,支持列表:https://nodemailer.com/smtp/well-known
port: 465, // SMTP 端口,不能写别的端口
secureConnection: true, // 使用 SSL(安全方式,防止被窃取信息)
auth: {
user: 'xxxxxx@qq.com', //你准备作为发件方的邮箱
pass: 'xxxxxx', // 这里密码不是qq密码,是你设置的smtp授权码
}
});
let mailOptions = { //设置邮件信息
from: 'xxxxxx@qq.com', //你准备作为发件方的邮箱
to: 'xxxxxxxx@163.com', // 收件箱
subject: '邮件标题', // 邮件标题
// 发送text或者html格式
// text: 'I am the email body', // 文本格式的邮件内容
html: '<p>hml格式的邮件内容</p>' // hml格式的邮件内容
};
// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('ok');
});
这里我们需要注意,auth.pass 不是邮箱账户的密码而是stmp的授权码。
将上面的程序中的邮箱我的两个邮箱。然后执行:
node send.js
就收到邮件了:
收到了,就是这么简单。
如果你要发送附件,则先把要发送的文件放入工程中,并修改上面代码的附件的filename和path。
let mailOptions = { //设置邮件信息
from: 'xxxxxx@qq.com', //你准备作为发件方的邮箱
to: 'xxxxxxxx@163.com', // 收件箱
subject: '邮件标题', // 邮件标题
// 发送text或者html格式
// text: 'I am the email body', // 文本格式的邮件内容
html: '<p>hml格式的邮件内容</p>' // hml格式的邮件内容
attachments: [
{
filename: 'img1.png', // 改成你的附件名
path: 'public/images/img1.png', // 改成你的附件路径
cid : '00000001' // cid可被邮件使用
},
{
filename: 'img2.png', // 改成你的附件名
path: 'public/images/img2.png', // 改成你的附件路径
cid : '00000002' // cid可被邮件使用
},
]
}
如果你要发送附件,则先把要发送的文件放入工程中,并修改上面代码的附件的filename和path。
从代码中可以知道,要在邮件正文中添加图片,可以设置图片的cid,然后在img标签的src中设置为对应的cid即可。
注意,不建议在js代码中直接嵌入HTML代码,也不建议把图片加到邮件正文中。
其他的一些细节
抄送
- CC: Carbon Copy(抄送),用于通知相关的人,收件人可以看到都邮件都抄送给谁了。一般回报工作或跨部门沟通时,都会CC给收件人的领导一份
- BCC:Blind Carbon Copy(暗抄送),也是用于通知相关的人,但是收件人是看不到邮件被密送给谁了。
更多配置项:https://nodemailer.com/message/
好看的HTML邮件
HTML Email 编写指南: http://www.ruanyifeng.com/blog/2013/06/html_email.html
使用模板引擎
邮件信息一般都不是固定的,我们可以引入模板引擎对HTML内容进行渲染。当然这就不是本文的重点了。有兴趣的同学可以自己了解尝试下。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/20698.html