diff --git a/apps/notification/backend/services/email/email_bounce_service.py b/apps/notification/backend/services/email/email_bounce_service.py index df3d824..327d356 100644 --- a/apps/notification/backend/services/email/email_bounce_service.py +++ b/apps/notification/backend/services/email/email_bounce_service.py @@ -11,13 +11,13 @@ class EmailBounceService: async def process_bounce_event(self, email: str, tenant_id: str, bounce_type: BounceType, reason: str, message_id: str = None) -> Dict: - """处理退信事件,建立email_id关联""" + """handle bounce event, create email_id association""" try: - # 1. 查找对应的邮件记录 + # 1. find corresponding email record email_status_doc = await EmailSendStatusDoc.find_one( EmailSendStatusDoc.recipient_email == email, EmailSendStatusDoc.tenant_id == tenant_id - ).sort(-EmailSendStatusDoc.created_at) # 获取最新的邮件记录 + ).sort(-EmailSendStatusDoc.created_at) email_id = None template_id = None @@ -25,6 +25,12 @@ class EmailBounceService: if email_status_doc: email_id = email_status_doc.email_id template_id = email_status_doc.template_id + + # 2. update email status to bounced + email_status_doc.status = EmailSendStatus.BOUNCED + email_status_doc.updated_at = datetime.utcnow() + await email_status_doc.save() + await self.module_logger.log_info( "Found email record for bounce", properties={ @@ -42,11 +48,11 @@ class EmailBounceService: } ) - # 2. 创建退信记录 + # 3. create bounce record bounce_doc = EmailBounceDoc( email=email, tenant_id=tenant_id, - email_id=email_id, # 建立关联 + email_id=email_id, template_id=template_id, bounce_type=bounce_type, reason=reason, @@ -89,7 +95,7 @@ class EmailBounceService: raise async def get_bounce_info(self, email: str, tenant_id: str) -> Optional[Dict]: - """获取退信信息""" + """get bounce info""" try: bounce_doc = await EmailBounceDoc.find_one( EmailBounceDoc.email == email, @@ -125,7 +131,7 @@ class EmailBounceService: raise async def mark_bounce_processed(self, email: str, tenant_id: str) -> bool: - """标记退信为已处理""" + """mark bounce as processed""" try: bounce_doc = await EmailBounceDoc.find_one( EmailBounceDoc.email == email, @@ -159,14 +165,13 @@ class EmailBounceService: ) raise - async def is_blacklisted(self, email: str, tenant_id: str) -> bool: - """检查邮箱是否在黑名单中""" + async def is_blacklisted(self, email: str, tenant_id: str): + """check if email is blacklisted""" try: - # 查找该邮箱的退信记录 bounce_doc = await EmailBounceDoc.find_one( EmailBounceDoc.email == email, EmailBounceDoc.tenant_id == tenant_id, - EmailBounceDoc.bounce_type == BounceType.HARD_BOUNCE # 只检查硬退信 + EmailBounceDoc.bounce_type == BounceType.HARD_BOUNCE ) is_blacklisted = bounce_doc is not None