node 如何通过 smtp 发送 email ? nodemailer 模块如何使用
发布于 作者:苏南大叔 来源:程序如此灵动~
本文中,苏南大叔描述的是:如何使用node发送email,发送的过程中,正文采用的html带图片的形式。当然,发送是否被拦截,是否被判断为垃圾邮件,这个并不是本文所考虑的问题。

本文的测试环境是:node 8.11.3、npm 5.6.0、nodemailer 4.7.0。
安装依赖nodemailer
相关npm安装脚本如下:
npm install nodemailer --save
内置的smtp信息
在nodemailer内部,其实内置很多常见的smtp地址,可以参见下面这个文件:
node_modules/nodemailer/lib/well-known/services.json对于nodemailer这个库来说,是内置了一些常见的邮箱smtp信息服务的,也就是说,可能并不需要做相关设置。如果没有内置的配置信息,就需要您参照下一步确定smtp相关信息了。

确定smtp参数
通过smtp发信的过程中,需要确定用户名、密码、smtp地址、smtp端口这些信息。这些信息都需要到邮件服务提供商去确认相关参数。一般可以查询“如何设置客户端软件”获得。这里面的变数很多的。
- 比如用户名和密码,很有可能并不是你所想象的那样的。对于
qq来说,密码其实是授权码。 - 而
smtp的端口号,一般都是这么设置的:使用SSL,端口号为465。当然,如果不使用SSL的话,端口号一般为25。
下面的是几个已知的smtp的地址:
| name | address |
|---|---|
| QQ邮箱 | smtp.qq.com |
| 腾讯企业邮箱 | smtp.exmail.qq.com |
| 阿里云企业邮箱 | smtp.qiye.aliyun.com |
| 阿里云企业邮箱 | smtp.mxhichina.com |

发信脚本
下面的脚本是个demo,注意需要替换相关参数,不解释。
var mail_usr = "@";
var mail_pwd = "pwd";
var mail_host = "smtp_host";
var mail_to = "@";
var mail_title = “title”;
var mail_body = “<b>hello</b>”;
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
//service: 'qq',
host: mail_host, // 主机
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口
auth: {
user: mail_usr,
pass: mail_pwd
}
});
var mailOptions = {
from: mail_usr, // 发件地址
to: mail_to, // 收件列表
subject: mail_title, // 标题
html: mail_body // html 内容
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
return console.log(error);
}
console.log('Message sent: ' + info.response);
});成功和失败的情况,截图如下:

smtp的特殊设置说明
重点说明的就是下面的代码设置:
var transporter = nodemailer.createTransport({
//service: 'qq',
host: mail_host, // 主机
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口
//...
});设置好service的话,就相当于设置了host、secureConnection、port,因为service的名称是内置的服务商名称。具体支持的定义,请参见上一步骤的说明文件。
email正文的特别说明
正文支持html,但是也可以仅仅设置text,而不是html。这个就比较容易理解了。两者设置其一即可,苏南大叔认为设置html即可。
var mailOptions = {
//...
text: '<b>Hello</b>world', // 文本
//html:'<b>Hello</b>world', // html
//...
};总结
node发信比php发信,似乎更加轻便一些。下面的链接是使用php的phpmailer发信的相关经验文字。大家可以对比看看。
更多email相关经验文字,请点击这里查看。