初始化提交,包含完整的邮件系统代码
This commit is contained in:
111
run.py
Normal file
111
run.py
Normal file
@@ -0,0 +1,111 @@
|
||||
import os
|
||||
import argparse
|
||||
import logging
|
||||
import platform
|
||||
from app import create_app
|
||||
from app.services import SMTPServer, MailStore, EmailProcessor
|
||||
from app.services import register_smtp_server, register_mail_store, register_email_processor
|
||||
from app.models import get_session
|
||||
from flask import Flask
|
||||
|
||||
# 检测是否Windows环境
|
||||
IS_WINDOWS = platform.system().lower() == 'windows'
|
||||
|
||||
# 解析命令行参数
|
||||
parser = argparse.ArgumentParser(description='启动邮箱系统')
|
||||
parser.add_argument('--host', type=str, default='0.0.0.0', help='HTTP服务器主机地址')
|
||||
parser.add_argument('--port', type=int, default=5000, help='HTTP服务器端口')
|
||||
parser.add_argument('--smtp-host', type=str, help='SMTP服务器主机地址')
|
||||
parser.add_argument('--smtp-port', type=int, help='SMTP服务器端口')
|
||||
parser.add_argument('--debug', action='store_true', help='启用调试模式')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 创建Flask应用
|
||||
app = create_app()
|
||||
|
||||
# Windows环境下的特殊处理
|
||||
if IS_WINDOWS:
|
||||
try:
|
||||
# 尝试导入本地设置
|
||||
import local_settings
|
||||
if getattr(local_settings, 'SMTP_HOST', None):
|
||||
app.config['SMTP_HOST'] = local_settings.SMTP_HOST
|
||||
logging.info(f"使用Windows特殊设置: SMTP_HOST={local_settings.SMTP_HOST}")
|
||||
if getattr(local_settings, 'SMTP_PORT', None):
|
||||
app.config['SMTP_PORT'] = local_settings.SMTP_PORT
|
||||
logging.info(f"使用Windows特殊设置: SMTP_PORT={local_settings.SMTP_PORT}")
|
||||
except ImportError:
|
||||
logging.warning("未找到local_settings.py,将使用标准配置")
|
||||
|
||||
# 更新SMTP配置,如果命令行参数中指定了
|
||||
if args.smtp_host:
|
||||
app.config['SMTP_HOST'] = args.smtp_host
|
||||
if args.smtp_port:
|
||||
app.config['SMTP_PORT'] = args.smtp_port
|
||||
|
||||
# 初始化服务实例
|
||||
mail_store = MailStore(get_session)
|
||||
smtp_server = SMTPServer(
|
||||
host=app.config.get('SMTP_HOST', '127.0.0.1' if IS_WINDOWS else '0.0.0.0'),
|
||||
port=app.config.get('SMTP_PORT', 3825 if IS_WINDOWS else 25),
|
||||
mail_store=mail_store
|
||||
)
|
||||
email_processor = EmailProcessor(mail_store)
|
||||
|
||||
# 注册服务实例到全局对象
|
||||
register_mail_store(mail_store)
|
||||
register_smtp_server(smtp_server)
|
||||
register_email_processor(email_processor)
|
||||
|
||||
def start_services():
|
||||
"""启动所有服务"""
|
||||
logging.info("正在启动所有服务...")
|
||||
|
||||
# 启动邮件处理器
|
||||
if email_processor.start():
|
||||
logging.info("邮件处理器启动成功")
|
||||
else:
|
||||
logging.error("邮件处理器启动失败")
|
||||
|
||||
# 启动SMTP服务器
|
||||
if smtp_server.start():
|
||||
logging.info(f"SMTP服务器启动成功,监听 {smtp_server.host}:{smtp_server.port}")
|
||||
else:
|
||||
logging.error("SMTP服务器启动失败")
|
||||
|
||||
logging.info("所有服务已启动")
|
||||
|
||||
def stop_services():
|
||||
"""停止所有服务"""
|
||||
logging.info("正在停止所有服务...")
|
||||
|
||||
# 停止SMTP服务器
|
||||
if smtp_server.stop():
|
||||
logging.info("SMTP服务器已停止")
|
||||
|
||||
# 停止邮件处理器
|
||||
if email_processor.stop():
|
||||
logging.info("邮件处理器已停止")
|
||||
|
||||
logging.info("所有服务已停止")
|
||||
|
||||
@app.teardown_appcontext
|
||||
def teardown_appcontext(exception=None):
|
||||
"""应用上下文销毁时停止所有服务"""
|
||||
stop_services()
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
# 启动服务
|
||||
start_services()
|
||||
|
||||
# 启动Web服务器
|
||||
app.run(
|
||||
host=args.host,
|
||||
port=args.port,
|
||||
debug=args.debug
|
||||
)
|
||||
finally:
|
||||
# 确保在退出时停止所有服务
|
||||
stop_services()
|
||||
Reference in New Issue
Block a user