You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
3.2 KiB
75 lines
3.2 KiB
const nodemailer = require('nodemailer'); //引入模块
|
|
|
|
|
|
const reg = /^[a-zA-Z0-9]+([-_.][A-Za-zd]+)*@([a-zA-Z0-9]+[-.])+[A-Za-zd]{2,5}$/
|
|
|
|
const { EMAILCONFIG,SYSTEM_NAME } = require('../config/default.config')
|
|
|
|
const transporter = nodemailer.createTransport({
|
|
//node_modules/nodemailer/lib/well-known/services.json 查看相关的配置,如果使用qq邮箱,就查看qq邮箱的相关配置
|
|
host:EMAILCONFIG.HOST,
|
|
// secureConnection:true,
|
|
service: 'qq', //类型qq邮箱
|
|
// port: 465,
|
|
secure: true, // true for 465, false for other ports
|
|
auth: {
|
|
user: EMAILCONFIG.USER, // 发送方的邮箱
|
|
pass:EMAILCONFIG.PASS// smtp 的授权码
|
|
}
|
|
//pass 不是邮箱账户的密码而是stmp的授权码(必须是相应邮箱的stmp授权码)
|
|
//邮箱---设置--账户--POP3/SMTP服务---开启---获取stmp授权码
|
|
});
|
|
const typeList = {
|
|
signUp:'账户注册',
|
|
signIn:'登录',
|
|
reset:'重置密码',
|
|
writeoff:'注销账户'
|
|
}
|
|
|
|
function sendMail(mail, code, type) {
|
|
console.log(mail, code)
|
|
return new Promise((rec,rej) => {
|
|
if(!checkEmail(mail)){
|
|
rej('邮箱格式错误!')
|
|
}
|
|
// 发送的配置项
|
|
const mailOptions = {
|
|
from: '"TOGY.GC" <togy.gc@qq.com>', // 发送方
|
|
to: mail, //接收者邮箱,多个邮箱用逗号间隔
|
|
subject: `${SYSTEM_NAME}!`, // 标题
|
|
text: 'Hello world?', // 文本内容
|
|
html: `<div style="position: relative;height: 300px;width: 100%">
|
|
<div><h1 style="text-align: center;line-height: 70px">欢迎使用 ${SYSTEM_NAME} </h1><p style="text-align: center">您在某些地方请求了邮箱的验证码,如果不是自己操作请修改账户的密码。</p></div>
|
|
<div style="width: 100%;position:relative;height: 200px;display: flex;align-items: center;justify-content: center"><div style="line-height: 80px;padding: 1em;font-size: 24px;color:red;font-weight: bold;text-align: centerline-height: 1em">此验证码用于 ${typeList[type]}。 </div><p style="text-align: center"></p></div>
|
|
<div style="width: 100%;position:relative;height: 200px;display: flex;align-items: center;justify-content: center">
|
|
<div style="background: #333333;height: 80px;line-height: 80px;padding: 1em;font-size: 32px;color:#FEFEFE;font-weight: bold;text-align: center">${code}</div>
|
|
</div>
|
|
</div>`, //页面内容
|
|
// attachments: [{//发送文件
|
|
// filename: 'index.html', //文件名字
|
|
// path: './index.html' //文件路径
|
|
// },
|
|
// {
|
|
// filename: 'sendEmail.js', //文件名字
|
|
// content: 'sendEmail.js' //文件路径
|
|
// }
|
|
// ]
|
|
};
|
|
//发送函数
|
|
transporter.sendMail(mailOptions, (error, info) => {
|
|
if (error) {
|
|
rej(error,info)
|
|
} else {
|
|
rec(info) //因为是异步 所有需要回调函数通知成功结果
|
|
}
|
|
});
|
|
})
|
|
}
|
|
|
|
function checkEmail(email){
|
|
return reg.test(email)
|
|
}
|
|
module.exports = {
|
|
sendMail,
|
|
checkEmail
|
|
} |