本文中,苏南大叔描述的是:如何使用node发送email,发送的过程中,正文采用的html带图片的形式。当然,发送是否被拦截,是否被判断为垃圾邮件,这个并不是本文所考虑的问题。

苏南大叔:node 如何通过 smtp 发送 email ? nodemailer 模块如何使用 - node-email
node 如何通过 smtp 发送 email ? nodemailer 模块如何使用(图5-1)

本文的测试环境是:node 8.11.3npm 5.6.0nodemailer 4.7.0

安装依赖nodemailer

相关npm安装脚本如下:

npm install nodemailer --save

苏南大叔:node 如何通过 smtp 发送 email ? nodemailer 模块如何使用 - dependencies
node 如何通过 smtp 发送 email ? nodemailer 模块如何使用(图5-2)

内置的smtp信息

nodemailer内部,其实内置很多常见的smtp地址,可以参见下面这个文件:

node_modules/nodemailer/lib/well-known/services.json

对于nodemailer这个库来说,是内置了一些常见的邮箱smtp信息服务的,也就是说,可能并不需要做相关设置。如果没有内置的配置信息,就需要您参照下一步确定smtp相关信息了。

苏南大叔:node 如何通过 smtp 发送 email ? nodemailer 模块如何使用 - smtp_defined
node 如何通过 smtp 发送 email ? nodemailer 模块如何使用(图5-3)

确定smtp参数

通过smtp发信的过程中,需要确定用户名密码smtp地址smtp端口这些信息。这些信息都需要到邮件服务提供商去确认相关参数。一般可以查询“如何设置客户端软件”获得。这里面的变数很多的。

  • 比如用户名和密码,很有可能并不是你所想象的那样的。对于qq来说,密码其实是授权码。
  • smtp的端口号,一般都是这么设置的:使用SSL,端口号为465。当然,如果不使用SSL的话,端口号一般为25

下面的是几个已知的smtp的地址:

nameaddress
QQ邮箱smtp.qq.com
腾讯企业邮箱smtp.exmail.qq.com
阿里云企业邮箱smtp.qiye.aliyun.com
阿里云企业邮箱smtp.mxhichina.com

苏南大叔:node 如何通过 smtp 发送 email ? nodemailer 模块如何使用 - qq_shouquanma
node 如何通过 smtp 发送 email ? nodemailer 模块如何使用(图5-4)

发信脚本

下面的脚本是个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);
});

成功和失败的情况,截图如下:

苏南大叔:node 如何通过 smtp 发送 email ? nodemailer 模块如何使用 - 成功失败截图
node 如何通过 smtp 发送 email ? nodemailer 模块如何使用(图5-5)

smtp的特殊设置说明

重点说明的就是下面的代码设置:

var transporter = nodemailer.createTransport({
    //service: 'qq',
    host: mail_host, // 主机
    secureConnection: true, // 使用 SSL
    port: 465, // SMTP 端口
    //...
});

设置好service的话,就相当于设置了hostsecureConnectionport,因为service的名称是内置的服务商名称。具体支持的定义,请参见上一步骤的说明文件。

email正文的特别说明

正文支持html,但是也可以仅仅设置text,而不是html。这个就比较容易理解了。两者设置其一即可,苏南大叔认为设置html即可。

var mailOptions = {
    //...
    text: '<b>Hello</b>world',    // 文本
    //html:'<b>Hello</b>world',   // html
    //...
};

总结

node发信比php发信,似乎更加轻便一些。下面的链接是使用phpphpmailer发信的相关经验文字。大家可以对比看看。

更多email相关经验文字,请点击这里查看。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   node    email

本站的忠实读者小伙伴,正在阅读下面这些文章: