diff --git a/app/__init__.py b/app/__init__.py index 95ed50a..5543ded 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,11 +3,21 @@ from .config import Config from .utils import (get_latest_emails, get_latest_email_with_code, add_allowed_domain, remove_allowed_domain, get_allowed_domains, get_allowed_domains_with_time, - get_all_emails) + get_all_emails, get_email_by_id) import redis import json import logging +# 配置日志 +logger = logging.getLogger('app') +logger.setLevel(logging.DEBUG) +# 添加控制台处理器 +handler = logging.StreamHandler() +handler.setFormatter(logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s' +)) +logger.addHandler(handler) + def create_app(): app = Flask(__name__) app.config.from_object(Config) @@ -66,7 +76,7 @@ def create_app(): logger.debug(f"Email message_id: {email.get('message_id')}") return render_template('email_list.html', emails=emails) except Exception as e: - app.logger.error(f"Error in list_emails_page: {str(e)}") + logger.error(f"Error in list_emails_page: {str(e)}") return "获取邮件列表失败", 500 @app.route('/web/email/') @@ -74,29 +84,10 @@ def create_app(): try: logger.debug(f"Accessing email with message_id: {message_id}") - # 直接从 Redis 获取邮件数据 - email_key = f"email:{message_id}" - logger.debug(f"Looking up Redis key: {email_key}") - - email_data = redis_client.hgetall(email_key) - if not email_data: - logger.warning(f"No data found for key: {email_key}") + # 使用新函数获取邮件数据 + email = get_email_by_id(message_id) + if not email: return "邮件不存在", 404 - - logger.debug(f"Found email data with fields: {list(email_data.keys())}") - - # 转换字节数据为字符串 - email = {k.decode(): v.decode() for k, v in email_data.items()} - logger.debug(f"Decoded email data: {email.keys()}") - - # 解析 JSON 字符串字段 - for field in ['recipients', 'attachments', 'headers', 'peer']: - if field in email: - try: - email[field] = json.loads(email[field]) - logger.debug(f"Successfully parsed {field} field") - except Exception as e: - logger.warning(f"Failed to parse {field} field: {str(e)}") return render_template('email_detail.html', email=email) diff --git a/app/utils.py b/app/utils.py index 2bb7f0b..82d1800 100644 --- a/app/utils.py +++ b/app/utils.py @@ -354,4 +354,36 @@ def get_all_emails(count=50): except Exception as e: logger.error(f"Error getting all emails: {str(e)}", exc_info=True) - return [] \ No newline at end of file + return [] + + +def get_email_by_id(message_id): + """ + 根据 message_id 获取邮件数据 + :param message_id: 邮件的唯一标识 + :return: 邮件数据字典或 None + """ + try: + email_key = f"email:{message_id}" + email_data = redis_client.hgetall(email_key) + if not email_data: + logger.warning(f"No data found for key: {email_key}") + return None + + # 转换字节数据为字符串 + email = {k.decode(): v.decode() for k, v in email_data.items()} + + # 解析 JSON 字符串字段 + for field in ['recipients', 'attachments', 'headers', 'peer']: + if field in email: + try: + email[field] = json.loads(email[field]) + logger.debug(f"Successfully parsed {field} field") + except Exception as e: + logger.warning(f"Failed to parse {field} field: {str(e)}") + + return email + + except Exception as e: + logger.error(f"Error getting email by ID {message_id}: {str(e)}") + return None \ No newline at end of file