nodemailer 的使用初体验

前情提要

说一下为什么会发现这个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
尤其需要注意一点,授权码邮箱给咱们的时候,是每四位一组通过空格隔开的16个字符,但是,咱们在使用的时候,不允许出现空格,否则邮箱服务器会返回一个未使用授权码的报错
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值