feat: align with upstream 1.5.9.9
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import { defineEventHandler, readBody } from 'h3'
|
||||
import { createApiError } from '~~/server/utils/apiError'
|
||||
import { SERVER_ERROR_CODES } from '~~/server/config/constants'
|
||||
import { getSystemSettingsCached } from '~~/server/utils/system-settings-helper'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = event.context.user
|
||||
if (!user || user.role !== 'SUPER_ADMIN') {
|
||||
throw createApiError(403, SERVER_ERROR_CODES.COMMON_INSUFFICIENT_PERMISSION, '只有超级管理员可以测试邮件发送')
|
||||
}
|
||||
|
||||
const body = await readBody(event)
|
||||
const { recipient } = body
|
||||
|
||||
if (!recipient) {
|
||||
throw createApiError(400, SERVER_ERROR_CODES.COMMON_INVALID_PARAMS, '缺少必要参数:recipient')
|
||||
}
|
||||
|
||||
const settings = await getSystemSettingsCached()
|
||||
if (!settings?.smtpHost || !settings?.smtpUsername || !settings?.smtpPassword) {
|
||||
return { success: false, message: '邮件服务未配置,请先在站点配置中设置 SMTP' }
|
||||
}
|
||||
|
||||
try {
|
||||
const nodemailer = await import('nodemailer').then((m) => m.default || m)
|
||||
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: settings.smtpHost,
|
||||
port: settings.smtpPort || 587,
|
||||
secure: settings.smtpSecure || false,
|
||||
auth: {
|
||||
user: settings.smtpUsername,
|
||||
pass: settings.smtpPassword
|
||||
}
|
||||
})
|
||||
|
||||
try {
|
||||
await transporter.sendMail({
|
||||
from: `"${settings.smtpFromName || 'VoiceHub'}" <${settings.smtpFromEmail || settings.smtpUsername}>`,
|
||||
to: recipient,
|
||||
subject: 'VoiceHub 邮件发送测试',
|
||||
text: '如果您收到此邮件,说明 VoiceHub 的邮件服务配置正确。'
|
||||
})
|
||||
|
||||
return { success: true, message: '测试邮件发送成功' }
|
||||
} finally {
|
||||
transporter.close()
|
||||
}
|
||||
} catch (err: any) {
|
||||
return { success: false, message: err.message || '邮件发送失败' }
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user