This commit is contained in:
zaunist committed 2025-06-23 17:16:38 +08:00
1 parent 249f49e5fb
commit aec9baa160
5 files changed
+91 -12

No files matched your search

+24 -5
View File
@@ -1,10 +1,10 @@
import React from 'react';
import React, { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import LanguageSwitcher from './LanguageSwitcher';
import HeaderMailbox from './HeaderMailbox';
import Container from './Container';
import { EMAIL_DOMAINS, DEFAULT_EMAIL_DOMAIN } from '../config';
import { getEmailDomains, getDefaultEmailDomain, EMAIL_DOMAINS, DEFAULT_EMAIL_DOMAIN } from '../config';
interface HeaderProps {
mailbox: Mailbox | null;
@@ -18,6 +18,25 @@ const Header: React.FC<HeaderProps> = ({
isLoading = false
}) => {
const { t } = useTranslation();
const [emailDomains, setEmailDomains] = useState<string[]>(EMAIL_DOMAINS);
const [defaultDomain, setDefaultDomain] = useState<string>(DEFAULT_EMAIL_DOMAIN);
// 异步获取邮箱域名配置
useEffect(() => {
const loadConfig = async () => {
try {
const domains = await getEmailDomains();
const defaultDom = await getDefaultEmailDomain();
setEmailDomains(domains);
setDefaultDomain(defaultDom);
} catch (error) {
console.error('加载邮箱域名配置失败:', error);
// 保持使用默认值
}
};
loadConfig();
}, []);
return (
<header className="border-b">
@@ -32,8 +51,8 @@ const Header: React.FC<HeaderProps> = ({
<HeaderMailbox
mailbox={mailbox}
onMailboxChange={onMailboxChange}
domain={DEFAULT_EMAIL_DOMAIN}
domains={EMAIL_DOMAINS}
domain={defaultDomain}
domains={emailDomains}
isLoading={isLoading}
/>
<div className="ml-3 pl-3 border-l border-muted-foreground/20 flex items-center">
@@ -57,4 +76,4 @@ const Header: React.FC<HeaderProps> = ({
);
};
export default Header;
export default Header;
+41 -4
View File
@@ -1,12 +1,49 @@
// 配置文件,用于管理域名和API地址设置
// 邮箱域名配置
export const EMAIL_DOMAINS = (import.meta.env.VITE_EMAIL_DOMAIN || '').split(',').map(domain => domain.trim());
export const DEFAULT_EMAIL_DOMAIN = EMAIL_DOMAINS[0] || '';
// 邮箱域名配置 - 从 API 动态获取
let cachedEmailDomains: string[] | null = null;
let configLoaded = false;
// 从 API 获取邮箱域名配置
export async function getEmailDomains(): Promise<string[]> {
if (cachedEmailDomains && configLoaded) {
return cachedEmailDomains;
}
try {
const response = await fetch('/api/config');
if (response.ok) {
const data = await response.json();
if (data.success && data.config.emailDomains) {
cachedEmailDomains = data.config.emailDomains;
configLoaded = true;
return cachedEmailDomains!;
}
}
} catch (error) {
console.error('获取邮箱域名配置失败:', error);
}
// 如果 API 获取失败,使用环境变量作为后备
const fallbackDomains = (import.meta.env.VITE_EMAIL_DOMAIN || '').split(',').map(domain => domain.trim()).filter(domain => domain);
cachedEmailDomains = fallbackDomains.length > 0 ? fallbackDomains : ['example.com'];
configLoaded = true;
return cachedEmailDomains!;
}
// 获取默认邮箱域名
export async function getDefaultEmailDomain(): Promise<string> {
const domains = await getEmailDomains();
return domains[0] || 'example.com';
}
// 同步版本的邮箱域名配置(用于向后兼容)
export const EMAIL_DOMAINS = (import.meta.env.VITE_EMAIL_DOMAIN || '').split(',').map(domain => domain.trim()).filter(domain => domain) || ['example.com'];
export const DEFAULT_EMAIL_DOMAIN = EMAIL_DOMAINS[0] || 'example.com';
// API地址配置
export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '';
// 其他配置
export const DEFAULT_AUTO_REFRESH = false;
export const AUTO_REFRESH_INTERVAL = 10000; // 10秒
export const AUTO_REFRESH_INTERVAL = 10000; // 10秒
+2 -2
View File
@@ -41,7 +41,7 @@ export default {
},
// 处理邮件
async email(message: any, env: Env, ctx: ExecutionContext): Promise<void> {
async email(message: any, env: Env, _ctx: ExecutionContext): Promise<void> {
try {
await handleEmail(message, env);
} catch (error) {
@@ -51,7 +51,7 @@ export default {
},
// 定时任务 - 每小时清理过期邮箱以及过期邮件和已被阅读的邮件
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void> {
async scheduled(_event: ScheduledEvent, env: Env, _ctx: ExecutionContext): Promise<void> {
try {
const deleted = await cleanupExpiredMailboxes(env.DB);
console.log(`已清理 ${deleted} 个过期邮箱`);
+22
View File
@@ -29,6 +29,28 @@ app.get('/', (c) => {
return c.json({ status: 'ok', message: '临时邮箱系统API正常运行' });
});
// 获取系统配置
app.get('/api/config', (c) => {
try {
const emailDomains = c.env.VITE_EMAIL_DOMAIN || '';
const domains = emailDomains.split(',').map((domain: string) => domain.trim()).filter((domain: string) => domain);
return c.json({
success: true,
config: {
emailDomains: domains
}
});
} catch (error) {
console.error('获取配置失败:', error);
return c.json({
success: false,
error: '获取配置失败',
message: error instanceof Error ? error.message : String(error)
}, 500);
}
});
// 创建邮箱
app.post('/api/mailboxes', async (c) => {
+2 -1
View File
@@ -3,6 +3,7 @@ import { D1Database } from '@cloudflare/workers-types';
// 环境变量类型
export interface Env {
DB: D1Database;
VITE_EMAIL_DOMAIN?: string;
}
// 邮箱类型
@@ -105,7 +106,7 @@ export interface SaveAttachmentParams {
}
// API 响应类型
export interface ApiResponse<T> {
export interface ApiResponse {
success: boolean;
error?: string;
message?: string;