60 lines
2.3 KiB
JavaScript
60 lines
2.3 KiB
JavaScript
const nodemailer = require('nodemailer')
|
||
const { readSupportEmailList, readUserEmailList } = require('./storage')
|
||
const commonTemp = require('../template/commonTemp')
|
||
|
||
const emailCode = {
|
||
SUCCESS: 0,
|
||
FAIL: -1
|
||
}
|
||
|
||
const emailTransporter = async (params = {}) => {
|
||
let { toEmail, title, html } = params
|
||
try {
|
||
if(!toEmail) throw Error('missing params: toEmail')
|
||
let userEmail = (await readUserEmailList()).find(({ auth }) => auth.user === toEmail)
|
||
if(!userEmail) throw Error(`${ toEmail } 不存在已保存的配置文件中, 请移除后重新添加`)
|
||
let { target } = userEmail
|
||
let emailServerConf = (await readSupportEmailList()).find((item) => item.target === target)
|
||
if(!emailServerConf) throw Error(`邮箱类型不支持:${ target }`)
|
||
const timeout = 1000*5
|
||
let options = Object.assign({}, userEmail, emailServerConf, { greetingTimeout: timeout, connectionTimeout: timeout })
|
||
let transporter = nodemailer.createTransport(options)
|
||
let info = await transporter.sendMail({
|
||
from: userEmail.auth.user, // sender address
|
||
to: userEmail.auth.user, // list of receivers
|
||
subject: `EasyNode: ${ title }`,
|
||
html
|
||
})
|
||
// consola.success('email发送成功:', info.accepted)
|
||
return { code: emailCode.SUCCESS, msg: `send successful:${ info.accepted }` }
|
||
} catch(error) {
|
||
// consola.error(`email发送失败(${ toEmail }):`, error.message || error)
|
||
return { code: emailCode.FAIL, msg: error }
|
||
}
|
||
}
|
||
|
||
const sendEmailToConfList = (title, content) => {
|
||
// eslint-disable-next-line
|
||
return new Promise(async (res, rej) => {
|
||
let emailList = await readUserEmailList()
|
||
if(Array.isArray(emailList) && emailList.length >= 1) {
|
||
for (const item of emailList) {
|
||
const toEmail = item.auth.user
|
||
await emailTransporter({ toEmail, title, html: commonTemp(content) })
|
||
.then(({ code }) => {
|
||
if(code === 0) {
|
||
consola.success('已发送邮件通知: ', toEmail, title)
|
||
return res({ code: emailCode.SUCCESS })
|
||
}
|
||
consola.error('邮件通知发送失败: ', toEmail, title)
|
||
return rej({ code: emailCode.FAIL })
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
module.exports = {
|
||
emailTransporter,
|
||
sendEmailToConfList
|
||
} |