电子邮件作为最广泛使用的一种网络服务和我们的工作学习生活已经密不可分。接受信用卡的账单,注册网站,找回密码等等都需要用到它。今天在就来学习下如何在node下来发送邮件,为当前做的项目提供邮箱校验的功能。
邮箱校验的原理:当我们在xxx网站注册的时候,注册信息中一般都会要求你填一个邮箱(作用:1、当着登录的用户账号,2、找回密码),当你注册成功后系统就会向你填写的邮箱中发送一封带有特殊链接的邮件,要求你打开你的邮件去点击,当你进入邮箱点击连接系统就会接受到一个get请求从而验证邮箱是你本人的。
node发送邮件已经有一些第三方的组件,这里我使用nodemailer这个带三方组件来发邮件,如果不使用封装好的第三方组件自己写的话需要去熟悉和研究复杂的邮件协议来实现,如果要开发一个邮件服务那么这是必要的,但是一个小小的邮件验证我觉得这是非必要的。
创建本次邮箱校验demo使用的数据库的表
DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT \'主键\', `username` varchar(20) NOT NULL COMMENT \'用户名\', `password` varchar(255) NOT NULL COMMENT \'用户密码\', `email` varchar(255) NOT NULL COMMENT \'邮箱\', `code` varchar(255) NOT NULL COMMENT \'邮箱验证使用的code\', `email_state` int(2) NOT NULL COMMENT \'邮箱验证状态。 0:未验证,1:已验证\', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这就是本次邮箱校验demo中用到的用户信息表,其实还应该有一张表存放每次发送邮箱验证时候生成的一些数据,比如code,过期时间等,在这里我就不校验邮件的过期时间了,code也直接放在用户信息表中了,如果你在正式系统中请新建一张表或者在缓存中来存放每次发送邮件生成的临时数据。
nodemailer介绍及其使用
特性列表
- 不依赖于其它模块
- 支持unicode编码,包括emoji表情
- 支持windows系统
- 邮件内容支持纯文本和html
- 支持添加附件
- 邮件内容如果是html还可以插入图片
- 支持除了默认SMTP协议外的其它传输协议
- 使用TLS / STARTTLS安全电子邮件传递
- SMTP连接代理
- 健全的oauth2认证
- DKIM消息签名
- 自定义插件支持处理消息
- 支持es6语法
详细文档nodemailer官方地址
nodemailer配置
通过npm install nodemailer --save安装这个模块到项目。当前的nodemailer的版本是4.0.1
nodemailer使用
使用nodemailer发送一封邮件大概需要4步
1、在文件中引入nodemailer
const nodemailer = require(\'nodemailer\');
2、创建一个传输对象
let transporter = nodemailer.createTransport({
host: \'smtp.163.com\',
port: 465,
secure: true,
auth: {
user: \'username@163.com\', //邮箱的账号
pass: \'userpass\'//邮箱的密码
}
});
3、设置电子邮件
let mailOptions = {
from: \'"Fred Foo