准备工作:
- 打开自己邮箱的三方访问授权
- 建立一个新的云函数
怎么实现, 网上搜, 大同小异, 也都能解决问题, 但是网上给出的实例都是在云函数中发固定内容, 试了一下用 event 传递参数(参考访问mysql的云函数的做法), 可以自由对 from / to / subject / text 设置
主要的代码如下:
1, 把云函数改成这个样子
const cloud = require('wx-server-sdk')
cloud.init()
//引入发送邮件的类库
var nodemailer = require('nodemailer') //这个需要自己根据网上的教程安装
// 创建一个SMTP客户端配置
var config = {
host: 'smtp.qq.com', //网易163邮箱 smtp.163.com
port: 465, //网易邮箱端口 25
auth: {
user: 'alanliuhui@qq.com', //邮箱账号 910047602
pass: '' //邮箱的授权码 自己搜怎么获取授权码并填入
}
};
var transporter = nodemailer.createTransport(config);
// 云函数入口函数
exports.main = async(event, context) => {
// 创建一个邮件对象
var mail=event.mymail
try
{
let res = await transporter.sendMail(mail) //event.mailtxt); //mail
return res;
}
catch (err)
{
console.log("发送邮件错误", err)
return err
}
}
2, 在自己的js中把sendmail封装成一个函数
sendmailclass(myfrom,myto,mysubject,mytext)
{
wx.cloud.callFunction({
name:"sendmail",
data:{
mymail:
{
from: myfrom,
subject: mysubject,
to: myto,
text: mytext,
}
},
success(res)
{
console.log("发送邮件成功",res)
},
fail(res)
{
console.log("发送邮件失败",res)
}
})
}
})
3, 在需要的使用发送邮件功能的wxml调用函数中, 使用以下代码自定义发送邮件的内容
sendmail(){
var myfrom='<alanliuhui@qq.com>来自微信小程序[玩趋势one]'
var mysubject='发送选股内容'
var myto='910047602@qq.com'
var mytext='--------------'
this.sendmailclass(myfrom,myto,mysubject,mytext)
}
有一个重要的坑, 在myfrom中, 一定要保留尖括号和其中的发件箱, 在本例中是<alanliuhui@qq.com>这部分, 如果没有, 就会发送失败.