Initial miaojingAI project with image resolution guard
This commit is contained in:
84
src/app/api/admin/email-settings/route.ts
Normal file
84
src/app/api/admin/email-settings/route.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user