diff --git a/server/app/controller/notify.js b/server/app/controller/notify.js
index 84c3d17..b24f8e0 100644
--- a/server/app/controller/notify.js
+++ b/server/app/controller/notify.js
@@ -1,4 +1,5 @@
const { readNotifyConfig, writeNotifyConfig, readNotifyList, writeNotifyList } = require('../utils')
+const { sctTest, emailTest } = require('../utils/test-notify')
// const commonTemp = require('../template/commonTemp')
async function getNotifyConfig({ res }) {
@@ -9,8 +10,21 @@ async function getNotifyConfig({ res }) {
// 根据type待编写测试方法,测试通过才保存到库
async function updateNotifyConfig({ res, request }) {
let { body: { noticeConfig } } = request
- await writeNotifyConfig(noticeConfig)
- return res.success()
+ let { type } = noticeConfig
+ try {
+ switch(type) {
+ case 'sct':
+ await sctTest(noticeConfig[type])
+ break
+ case 'email':
+ await emailTest(noticeConfig[type])
+ break
+ }
+ await writeNotifyConfig(noticeConfig)
+ return res.success({ msg: '测试通过 | 保存成功' })
+ } catch (error) {
+ return res.fail({ msg: error.message })
+ }
}
async function getNotifyList({ res }) {
diff --git a/server/app/utils/test-notify.js b/server/app/utils/test-notify.js
new file mode 100644
index 0000000..be67a54
--- /dev/null
+++ b/server/app/utils/test-notify.js
@@ -0,0 +1,47 @@
+const nodemailer = require('nodemailer')
+const axios = require('axios')
+
+module.exports.sctTest = function ({ sendKey }) {
+ // eslint-disable-next-line no-async-promise-executor
+ return new Promise((async (resolve, reject) => {
+ consola.info('server酱通知测试: ', sendKey)
+ try {
+ let { data } = await axios.get(`https://sctapi.ftqq.com/${ sendKey }.send?title=messagetitle`)
+ resolve(data)
+ consola.success('测试成功')
+ } catch (error) {
+ reject(error)
+ consola.error('测试失败: ', error)
+ }
+ }))
+}
+
+module.exports.emailTest = function (conf) {
+ // eslint-disable-next-line no-async-promise-executor
+ return new Promise((async (resolve, reject) => {
+ consola.info('邮箱通知测试: ', conf)
+ try {
+ const { service, user, pass } = conf
+ let transporter = nodemailer.createTransport({
+ service,
+ auth: {
+ user,
+ pass
+ }
+ })
+ let info = await transporter.sendMail({
+ from: user,
+ to: user,
+ subject: 'EasyNode: 测试邮件通知',
+ text: '测试邮件',
+ html: '测试邮件'
+ })
+ consola.info('Message sent: %s', info.messageId)
+ resolve()
+ consola.success('测试成功')
+ } catch (error) {
+ reject(error)
+ consola.error('测试失败: ', error)
+ }
+ }))
+}
diff --git a/web/src/views/setting/components/notify-config.vue b/web/src/views/setting/components/notify-config.vue
index 23f9beb..7b8b7ed 100644
--- a/web/src/views/setting/components/notify-config.vue
+++ b/web/src/views/setting/components/notify-config.vue
@@ -40,9 +40,10 @@
+ 邮箱服务商, 例如: Gmial、qq、126、163, 支持列表: 点击查询
- 保存并测试
+ 测试并保存
@@ -100,20 +101,28 @@ const rules = reactive({
const handleSave = () => {
formRef.value.validate(async (valid) => {
if (!valid) return
- await $api.updateNotifyConfig({ noticeConfig: { ...noticeConfig.value } })
- $message.success('保存成功')
+ try {
+ loading.value = true
+ await $api.updateNotifyConfig({ noticeConfig: { ...noticeConfig.value } })
+ // $message.success('保存成功')
+ $notification.success({
+ title: '测试通过 | 保存成功',
+ message: '请确认通知方式是否已收到通知'
+ })
+ } catch (error) {
+ console.error(error)
+ } finally {
+ loading.value = false
+ }
})
}
const getNotifyConfig = async () => {
try {
- loading.value = true
let { data } = await $api.getNotifyConfig()
noticeConfig.value = data || {}
} catch (error) {
console.error(error)
- } finally {
- loading.value = false
}
}
@@ -126,5 +135,10 @@ onMounted(() => {