前情提要
说一下为什么会发现这个node库,公司新版本APP和小程序均需要对接微信支付,因为APP绑定的商户实体发生过变更,资质一直下不来,后台无法发起APP支付,商讨后的方案是,由小程序发起支付,APP负责调起小程序并传递参数给小程序。操作很简单,但是有一个问题就是,APP调起小程序的话,小程序的日志无法被输出 ,调试不了这就很难受,于是,我就想不如通过node起一个web服务,小程序通过app.js中的onLaunch或者onShow等生命周期时间来捕获deepLink中的参数,然后,调用web服务的接口,将解析过的参数发送给node,再通过邮件发送到我的邮箱中让我可以进行直观的debug。
虽然,直接把接口的request参数打印在node的控制台上也可以,但是当时就是属于鬼迷心窍,就是想弄一个邮件发送的函数,根本没有往省事儿的方面上去想。
安装和使用nodemailer
安装:
$ npm install nodemailer
引入:
const nodemailer = require('nodemailer');
需要注意的小问题
使用这种东西做邮件发送服务的时候,邮箱应用都会认为咱们是通过第三方软件进行的相应协议传输,所以,需要打开邮箱中的相应设置
QQ邮箱
163邮箱
开启上述的服务后,邮箱会给咱们一个叫做授权码的东西,我们只要使用这个授权码进行邮箱的身份验证,这个一会代码中有体现。
上代码
const nodemailer = require('nodemailer');
class Mail {
/**
*
* @param {*} userAccount 个人邮箱的账号 ex. xxxx@qq.com
* @param {*} pass 邮箱开启SMTP服务后得到的授权码
* @param {*} to 邮件接收者邮箱账号
* @param {*} params
* @param {*} params.subject 邮件的主题
* @param {*} params.text 邮件的文本内容 可以为空 为空的话,是一个内容为空白的邮件
* @param {*} params.html 邮件的HTML内容 可以为空
*/
constructor(userAccount, pass, to, params) {
if (!userAccount || !pass) {
throw new Error('个人邮箱账号或邮箱授权码不能为空')
}
// if (!params) { throw new Error('') }
this.userAccount = userAccount
this.pass = pass
if (!to) {
throw new Error('邮件接收者邮箱账号不能为空')
}
this.to = to
if (!params || params === {}) {
throw new Error('邮件内容信息不能为空')
}
this.mailOptions = params
}
sendMail() {
var transporter = nodemailer.createTransport({
// 邮箱服务的host: qq: smtp.qq.com; 163: smtp.163.com
host: 'smtp.qq.com',
// 开启安全连接,这个开不开都可以,对安全性有要求的话,最好开启
secureConnection: true,
// SMTP协议端口号
port: 465,
auth: {
user: this.userAccount,
pass: this.pass,
},
tls: {
rejectUnauthorized: false, // 拒绝认证就行了, 不然会报证书问题
},
});
// 配置发送内容
var mailOptions = {
// 发件人邮箱
from: this.userAccount,
// 收件人邮箱, 多个邮箱地址用逗号隔开
to: this.to,
// 邮件主题
subject: this.mailOptions.subject,
// 邮件内容 text: 纯文本; html: 识别标签
text: this.mailOptions.text ? this.mailOptions.text : undefined,
html: this.mailOptions.html ? this.mailOptions.html : undefined,
// 发送邮箱附件
attachments: [{
// 文件名
filename: 'server.js',
// 文件路径
path: './server.js'
}]
}
console.log(mailOptions)
// 发送邮件
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
console.log('错误:' + err);
} else {
console.log('邮件发送:' + info.response);
}
});
}
}
module.exports = Mail