使用uniCloud云函数结合nodemailer发送邮件的时候,在本地调试可以发送成功,但是当我把云函数上传后,就不能发送到邮件了,但是云函数依旧执行了。开始我以为是node.js版本的原因,但是经过排查,我发现不是版本原因,而是线程原因,于是,我前往社区查看,最终找到了一篇很有用的文章。如下:
网上找的node发邮件,用到最多的是nodemailer,于是利用百度出来的代码,直接运行在uniCloud,本地运行发送成功,但是云端一直报错。
仔细看了报错内容,提到Thread,所以猜测代码里新建了线程去发邮件。
为了找到如何用当前线程发,第一时间想到的是nodemailer的官方文档:https://nodemailer.com/about/
结合官方文档,写了个可以在uniCloud云端正常发邮件,并且亲测成功的代码:
这里也放上我更改后的代码:
'use strict';
const nodemailer = require('nodemailer') // 记得在当前文件夹执行npm install nodemailer后才能使用
exports.main = async (event, context) => {
// let name = event.body
var user = '87654321@qq.com' //自己的邮箱
var pass = 'xxxxxx' //qq邮箱的授权码
var rece = '12345678@qq.com' //对方邮箱
let transporter = nodemailer.createTransport({
host: 'smtp.qq.com',
secureConnection: true,
port: 465,
secure: true,
auth: {
user: user,
pass: pass
}
})
const info = await transporter.sendMail({
from: `发送人<${user}>`,
to: `接收人<${rece}>`,
subject: '主题',
html: '<h1>这是来自云函数的邮件</h1>',
// text: '文本'
})
if (info.messageId) {
// return {code: 0, msg: '发送成功'}
return event
} else {
// return {code: 1, msg: '发送失败', info}
return event
}
}
如上代码所示,亲测可用!