From e5ffc6310d720004f2c95b1bce20bf2edb12abe3 Mon Sep 17 00:00:00 2001 From: huangzhenpc Date: Wed, 26 Feb 2025 11:31:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=82=AE=E4=BB=B6=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=BF=9D=E5=AD=98=E9=82=AE=E4=BB=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A1.=20=E6=B7=BB=E5=8A=A0=E9=82=AE=E7=AE=B1ID?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91=202.=20=E8=B0=83=E6=95=B4S?= =?UTF-8?q?MTP=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=BF=9E=E6=8E=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/mail_store.py | 31 ++++++++++++++++++++++++++++++- send_verification_email.py | 3 ++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/services/mail_store.py b/app/services/mail_store.py index 00d9a00..14b85b0 100644 --- a/app/services/mail_store.py +++ b/app/services/mail_store.py @@ -161,11 +161,40 @@ class MailStore: # 保存到数据库 session = self.db_session_factory() try: + # 查找收件人对应的邮箱 + mailbox_id = None + recipients_list = recipients if isinstance(recipients, list) else [recipients] + + for recipient in recipients_list: + # 提取域名和用户名 + if '@' in recipient: + username, domain = recipient.split('@', 1) + logging.info(f"查找邮箱: 用户名={username}, 域名={domain}") + + # 查询域名 + domain_obj = session.query(Domain).filter(Domain.name == domain).first() + if domain_obj: + # 查询邮箱 + mailbox = session.query(Mailbox).filter( + Mailbox.domain_id == domain_obj.id, + Mailbox.address == username + ).first() + + if mailbox: + mailbox_id = mailbox.id + logging.info(f"找到邮箱ID: {mailbox_id}") + break + + if not mailbox_id: + logging.error(f"收件人 {recipients} 没有对应的邮箱记录") + return False, "收件人邮箱不存在" + # 创建新邮件记录 new_email = Email( + mailbox_id=mailbox_id, # 设置邮箱ID subject=subject, sender=sender, - recipients=','.join(recipients) if isinstance(recipients, list) else recipients, + recipients=','.join(recipients_list) if len(recipients_list) > 1 else recipients_list[0], body_text=body_text, body_html=body_html, received_at=datetime.now() diff --git a/send_verification_email.py b/send_verification_email.py index 5361dd7..0d1a615 100644 --- a/send_verification_email.py +++ b/send_verification_email.py @@ -49,7 +49,8 @@ def send_verification_email(smtp_host, smtp_port, to_email): # 连接SMTP服务器并发送 try: - server = smtplib.SMTP(smtp_host, smtp_port) + # 使用显式的源地址 + server = smtplib.SMTP(smtp_host, smtp_port, timeout=30, source_address=('127.0.0.1', 0)) server.set_debuglevel(1) # 开启调试模式 print(f"连接到SMTP服务器: {smtp_host}:{smtp_port}")