首发于Node实战
如何用node发送邮件?

如何用node发送邮件?

今天我们来捣鼓这么个东西:

每天定时自动发送邮件给你女票或男票,告诉她/他 --have a nice day,达令~~

先自己想想,咋搞?

首先,我们得知道如何发送邮件。

这个应该难不倒你,问题是这个定时么。。。。

如果你懂一点linux,应该知道有crontab计划任务这个东东吧(不知道的可以现在就百度一下)。计划任务可以灰常方便的解决我们的问题,如果node也有类似的功能就好啦!有吗?

答案是:有哒!不过这个我们放在下节课再讲,眼下先实现第一步~~

首先搞一下邮件发送。

我知道,你习惯性的用express生成了一个文件结构对吧?

这里大家注意一下:

express只是方便开发web项目的工具,因为它自动创建了mvc结构,运行后阻塞监听某个端口号。

而我们这里其实不用监听什么端口号,运行一次就完事了。

1.首先当然是找工具包。

我们建个空文件夹,然后运行一下:

npm install nodemailer --save

npm install nodemailer-smtp-transport --save

2.下面写js脚本。

var nodemailer = require("nodemailer");
var smtpTransport = require('nodemailer-smtp-transport');

// 开启一个 SMTP 连接池
var transport = nodemailer.createTransport(smtpTransport({
host: "smtp.126.com", // 主机,各服务商的主机地址不同,比如qq的是smtp.qq.com
secure:false, // 使用 SSL
secureConnection: false, // 使用 SSL
port: 25, // 网易的SMTP端口,各个服务商端口号不同,比如qq的是465
auth: {
user: "nodemail_123@126.com", // 账号
pass: "xxxxxx" // 如果是网易邮箱,这个并不是登录密码,而是授权码
}
}));
// 设置邮件内容
var mailOptions = {
from: "nodemail_123<nodemail_123@126.com>", // 发件人地址
to: "nodemail_456@126.com,hello123@126.com", // 收件人列表,逗号分隔,可以放多个
subject: "Happy every day", // 标题
html: "<b>Good Morning!</b> 该起床了!" // html 内容
}
// 发送邮件
transport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
}else{
console.log("Message send ok");
}
transport.close(); // 如果没用,关闭连接池
});

3.注意事项:

上面的代码看起来很容易,但一运行,百分之二百会报错。

如果不出意外,大部分应该是550或535错误。

我们知道http协议里面有500,这个550和535是干啥的呢?

遇到这种问题就说明,我们的邮箱没有配置smtp权限。

有人已经开始犯迷糊了:你说的smtp是啥啊?完全听不明白啊!

我们可以拿smtp跟http做比较。

http,全称HyperText Transfer Protocol,超文本传输协议,你可以理解成字符串传输的协议。也就是说,玩http是跟字符串打交道的。

但是呢,邮件传输跟字符串传输不一样,它有自己的几套标准。注意,这哥们是有几套标准,而smtp只是其中之一。

smtp,全称Simple Mail Transfer Protocol,可以翻译为简单邮件传输协议。除此之外,还有两种常用的协议。

pop3(Post Office Protocol - Version 3),可以翻译为邮政官方协议3。

imap( Internet Mail Access Protocol),互联网邮件访问协议。

从名字可以看出,这俩哥们都起的比第一个要屌。没办法,沾上简单二字,本身就沦为下品了,哈哈~~

开玩笑撒,smtp使用场景还是比较广泛的,具体三种协议的差别么,这里不多做赘述,有兴趣的童鞋可以下去百度一下。我们继续往下讲。

我们新注册的邮箱一般都不会开通三种邮件协议的权限,需要我们自己设置一下。

我们先登录一下nodemail_123@126.com这个邮箱,进入后,看到顶部有设置一项:


点进去后,是这样一个页面:

选择第一项,会弹出客户授权窗口:

输入验证码后:


注意,这里的授权码,是代码中的pass参数!而不是登录邮箱的密码!

设置完成后:

做完这些工作后,你再重新运行一下代码,看是否发送成功了?

其他的邮箱情况也都是类似,这里就不一一列举了,都是需要先在设置里面配置一下。

登录nodemail_456@126.com,查收一下邮件:

从这个例子,我们慢慢就接触到更多后端的知识。学海无涯嘛,我们要始终保持一颗谦恭的心,不断前进,前进!

更多精彩内容,请关注我的微信公众号:“前端js动力节点”。

编辑于 2017-07-15

文章被以下专栏收录