Files
miaojingAI/src/app/api/admin/email-settings/route.ts

85 lines
3.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { requireAdmin } from '@/lib/admin-auth';
import {
getEmailSettings,
getRequestBaseUrl,
publicEmailSettings,
renderEmailTemplate,
saveEmailSettings,
sendTemplatedEmail,
} from '@/lib/email-service';
import { getDbClient } from '@/storage/database/local-db';
export const runtime = 'nodejs';
export async function GET(request: NextRequest) {
const adminError = await requireAdmin(request);
if (adminError) return adminError;
const client = await getDbClient();
try {
const settings = await getEmailSettings(client);
const platformUrl = getRequestBaseUrl(request) || settings.appBaseUrl;
const preview = renderEmailTemplate(settings, {
title: '通知邮件模板预览',
intro: '这是一封由管理员发送给用户的通知邮件示例,用于预览全局通用邮件模板效果。',
body: '你可以在后台使用这套模板发送系统公告、功能更新、订单提醒、活动通知和安全提醒。实际发送时,标题、正文、按钮和备注会替换为管理员填写的内容。',
buttonText: '进入妙境',
buttonUrl: platformUrl,
note: '验证码邮件使用独立安全验证模板;管理员通知、管理员邮件和提醒邮件使用这套通用模板。',
templateKind: 'notification',
assetBaseUrl: platformUrl,
});
return NextResponse.json({ settings: publicEmailSettings(settings), preview });
} finally {
client.release();
}
}
export async function PUT(request: NextRequest) {
const adminError = await requireAdmin(request);
if (adminError) return adminError;
const client = await getDbClient();
try {
const body = await request.json();
const settings = await saveEmailSettings(client, body);
return NextResponse.json({ success: true, settings, message: '邮箱配置已保存' });
} catch (error) {
const message = error instanceof Error ? error.message : '邮箱配置保存失败';
return NextResponse.json({ error: message }, { status: 400 });
} finally {
client.release();
}
}
export async function POST(request: NextRequest) {
const adminError = await requireAdmin(request);
if (adminError) return adminError;
const client = await getDbClient();
try {
const body = await request.json();
const to = typeof body.to === 'string' ? body.to.trim() : '';
if (!to) {
return NextResponse.json({ error: '请填写测试收件邮箱' }, { status: 400 });
}
await sendTemplatedEmail(client, {
to,
type: 'business',
subject: '【妙境】邮箱配置测试',
title: '邮箱配置测试',
intro: '如果你收到这封邮件,说明自定义域名邮箱 SMTP 配置已生效。',
note: '请同时检查收件箱、垃圾箱,以及 SPF/DKIM/DMARC 解析状态。',
ipAddress: 'admin-test',
assetBaseUrl: getRequestBaseUrl(request) || undefined,
});
return NextResponse.json({ success: true, message: '测试邮件已发送' });
} catch (error) {
const message = error instanceof Error ? error.message : '测试邮件发送失败';
return NextResponse.json({ error: message }, { status: 400 });
} finally {
client.release();
}
}