Files
emailsystem/production_local_settings.py
2025-02-25 19:50:00 +08:00

104 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
生产环境配置文件
此文件包含在生产环境中运行邮箱系统的优化设置
部署时请重命名为local_settings.py
"""
import platform
import os
import logging
from logging.handlers import RotatingFileHandler
import multiprocessing
# 基础配置
IS_PRODUCTION = True
LOG_LEVEL = 'INFO' # 可选: DEBUG, INFO, WARNING, ERROR, CRITICAL
# SMTP服务器配置
SMTP_HOST = '0.0.0.0' # 监听所有网络接口
SMTP_PORT = 25 # 标准SMTP端口
# 如果ISP阻止了25端口可以使用备用端口
# SMTP_PORT = 587 # 备用端口
# 性能优化
# 自动根据CPU核心数调整工作线程数
CPU_COUNT = multiprocessing.cpu_count()
WORKER_THREADS = max(2, min(CPU_COUNT * 2, 8)) # 至少2个线程最多8个线程
# 邮件处理优化
MAX_EMAIL_SIZE = 25 * 1024 * 1024 # 25MB单个邮件最大大小
EMAIL_BATCH_SIZE = 50 # 批处理邮件数量
EMAIL_RETENTION_DAYS = 30 # 邮件保留天数,超过此天数的邮件将被自动清理
# 存储路径配置
MAIL_STORAGE_PATH = os.path.join(os.getcwd(), 'email_data')
LOG_FILE = os.path.join(os.getcwd(), 'logs', 'email_system.log')
# 安全设置
ENABLE_RATE_LIMITING = True # 启用API请求限流
API_RATE_LIMIT = '120/minute' # 每分钟最大请求数
ENABLE_IP_WHITELIST = False # 是否启用IP白名单
IP_WHITELIST = ['127.0.0.1'] # 允许访问API的IP列表
# 垃圾邮件过滤设置
ENABLE_SPAM_FILTER = True # 启用简单的垃圾邮件过滤
SPAM_KEYWORDS = ['casino', 'lottery', 'viagra', 'prescription', 'winner', 'prize', 'bitcoin']
MAX_RECIPIENTS_PER_EMAIL = 50 # 单封邮件最大收件人数量
# 邮件域名白名单(只接收这些域名的邮件,空列表表示接收所有)
DOMAIN_WHITELIST = []
# 日志配置
def setup_logging():
"""配置系统日志"""
log_dir = os.path.dirname(LOG_FILE)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 文件处理器 - 使用循环日志文件最大10MB保留10个备份
file_handler = RotatingFileHandler(
LOG_FILE, maxBytes=10*1024*1024, backupCount=10
)
file_handler.setFormatter(formatter)
file_handler.setLevel(getattr(logging, LOG_LEVEL))
# 控制台处理器
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(getattr(logging, LOG_LEVEL))
# 配置根日志记录器
root_logger = logging.getLogger()
root_logger.setLevel(getattr(logging, LOG_LEVEL))
root_logger.addHandler(file_handler)
root_logger.addHandler(console_handler)
logging.info("生产环境日志系统初始化完成")
# 自动清理功能
ENABLE_AUTO_CLEANUP = True # 启用自动清理
CLEANUP_INTERVAL_HOURS = 24 # 每24小时运行一次清理
# 监控设置
ENABLE_MONITORING = True # 启用系统监控
MONITOR_INTERVAL_MINUTES = 5 # 监控间隔(分钟)
# 在应用启动时设置日志
try:
setup_logging()
logging.info("已加载生产环境配置")
except Exception as e:
print(f"日志设置失败: {str(e)}")
# 系统启动时记录配置信息
if IS_PRODUCTION:
logging.info(f"SMTP服务器配置: {SMTP_HOST}:{SMTP_PORT}")
logging.info(f"工作线程数: {WORKER_THREADS}")
logging.info(f"邮件存储路径: {MAIL_STORAGE_PATH}")
logging.info(f"日志级别: {LOG_LEVEL}")
# 创建必要的目录
os.makedirs(MAIL_STORAGE_PATH, exist_ok=True)
os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)