diff --git a/app/services/mail_store.py b/app/services/mail_store.py index 0116ba5..ed820b2 100644 --- a/app/services/mail_store.py +++ b/app/services/mail_store.py @@ -34,6 +34,12 @@ class MailStore: async def save_email(self, message, sender, recipients, raw_data=None): """保存邮件到数据库和文件系统""" logging.info(f"开始保存邮件: 发件人={sender}, 收件人={recipients}") + if recipients is None: + logging.warning("收件人列表为None,将使用空列表") + recipients_list = [] + else: + recipients_list = recipients.split(",") # 假设是以逗号分隔的字符串 + logging.debug(f"解析后的收件人列表: {recipients_list}") try: # 解析邮件内容 email_subject = None @@ -44,24 +50,29 @@ class MailStore: # 提取邮件主题 if hasattr(message, 'subject') and message.subject: email_subject = message.subject + logging.debug(f"提取的邮件主题: {email_subject}") # 提取邮件内容 if hasattr(message, 'get_body'): try: for part in message.walk(): content_type = part.get_content_type() + logging.debug(f"处理邮件部分: {content_type}") if content_type == "text/plain": body_text = part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8', errors='replace') + logging.debug(f"提取的纯文本内容长度: {len(body_text)}") elif content_type == "text/html": body_html = part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8', errors='replace') + logging.debug(f"提取的HTML内容长度: {len(body_html)}") # 处理附件 if part.get_filename(): file_name = part.get_filename() content = part.get_payload(decode=True) attachments.append((file_name, content)) + logging.debug(f"提取的附件: {file_name}") except Exception as e: logging.error(f"获取邮件内容时出错: {str(e)}") @@ -85,13 +96,6 @@ class MailStore: # 查找收件人对应的邮箱 mailbox_id = None - # 处理recipients为None的情况 - if recipients is None: - logging.warning("收件人列表为None,将使用空列表") - recipients_list = [] - else: - recipients_list = recipients if isinstance(recipients, list) else [recipients] - # 确保收件人列表不为空 if not recipients_list: logging.error("收件人列表为空,无法确定邮箱") @@ -100,6 +104,7 @@ class MailStore: # 尝试找到或创建收件人邮箱 for recipient in recipients_list: # 跳过空收件人 + logging.debug(f"处理收件人: {recipient}") if not recipient or '@' not in recipient: continue