Files
easynode/server/app/utils/notify.js
T
2024-08-18 15:02:31 +08:00

90 lines
3.0 KiB
JavaScript

const nodemailer = require('nodemailer')
const axios = require('axios')
const { getNotifySwByType, readNotifyConfig } = require('../utils/storage')
const commonTemp = require('../template/commonTemp')
function sendServerChan(sendKey, title, content) {
if (!sendKey) return consola.error('发送server酱通知失败, sendKey 为空')
return new Promise((async (resolve, reject) => {
try {
consola.info('server酱通知预发送: ', title)
const url = `https://sctapi.ftqq.com/${ sendKey }.send`
const params = new URLSearchParams({ text: title, desp: content })
let { data } = await axios.post(url, params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
resolve(data)
consola.info('server酱通知发送成功: ', title)
} catch (error) {
reject(error)
consola.error('server酱通知发送失败: ', error)
}
}))
}
function sendEmail({ service, user, pass }, title, content) {
if (!service || !user || !pass) return consola.info('发送通知失败, 邮箱配置信息不完整: ', { service, user, pass })
return new Promise((async (resolve, reject) => {
try {
consola.info('邮箱通知预发送: ', title)
let transporter = nodemailer.createTransport({
service,
auth: {
user,
pass
}
})
await transporter.sendMail({
from: user,
to: user,
subject: title,
// text: '', // 纯文本版本内容,如果收件人的邮件客户端不支持HTML显示,就会显示这个文本
html: commonTemp(content)
})
consola.info('邮件通知发送成功: ', title)
resolve()
} catch (error) {
reject(error)
consola.error('邮件通知发送失败: ', error)
}
}))
}
// 异步发送通知
async function asyncSendNotice(noticeAction, title, content) {
try {
let sw = await getNotifySwByType(noticeAction) // 获取对应动作的通知开关
console.log(noticeAction, sw)
if (!sw) return
let notifyConfig = await readNotifyConfig()
let { type } = notifyConfig
if (!type) return consola.error('通知类型不存在: ', type)
title = `EasyNode-${ title }`
content += `\n通知发送时间:${ new Date() }`
switch (type) {
case 'sct':
let { sendKey } = notifyConfig['sct']
if (!sendKey) return consola.info('未发送server酱通知, sendKey 为空')
await sendServerChan(sendKey, title, content)
break
case 'email':
let { service, user, pass } = notifyConfig['email']
if (!service || !user || !pass) return consola.info('未发送邮件通知通知, 未配置邮箱: ', { service, user, pass })
await sendEmail({ service, user, pass }, title, content)
break
default:
break
}
} catch (error) {
consola.error('通知发送失败: ', error)
}
}
module.exports = {
asyncSendNotice,
sendServerChan,
sendEmail
}