如何查询exchangelib发送邮件的回复码并捕获同类异常
exchangelib邮件错误捕获与SMTP状态码匹配方法
exchangelib基于Exchange EWS协议实现邮件操作,不会直接返回原生SMTP回复码,但可通过封装的异常类识别投递错误场景,也可将错误信息映射为对应的SMTP状态码。
1. 地址类错误捕获实现
针对你提到的510/511类邮箱地址错误场景,可直接捕获exchangelib封装的InvalidSMTPAddress异常,其他投递相关异常也可分类捕获:
from exchangelib import Account, Message, Mailbox from exchangelib.errors import ( InvalidSMTPAddress, ErrorRecipientNotFound, ErrorMessageRejected, EWSError ) # 账号初始化逻辑省略 account = Account(...) try: msg = Message( account=account, subject="测试邮件", body="内容测试", to_recipients=[Mailbox(email_address="test@invalid-domain.com")] ) msg.send() except InvalidSMTPAddress as e: # 对应SMTP 510/511地址无效错误 print(f"无效邮箱地址,错误详情:{e}") custom_smtp_code = 511 except ErrorRecipientNotFound as e: # 对应SMTP 550 收件人不存在错误 print(f"收件人不存在:{e}") custom_smtp_code = 550 except ErrorMessageRejected as e: # 对应SMTP 554 邮件被拒收错误 print(f"邮件被服务器拒收:{e}") custom_smtp_code = 554 except EWSError as e: # 兜底捕获所有EWS相关错误 print(f"投递失败,错误信息:{e}")
2. SMTP状态码映射规则
如果需要输出标准SMTP状态码,可通过异常类型和错误描述做自定义映射,常见映射关系如下:
- 捕获到
InvalidSMTPAddress异常/错误描述包含invalid smtp address:映射为510/511 - 错误描述包含
recipient not found/no such user:映射为550 - 错误描述包含
mailbox full/quota exceeded:映射为552 - 错误描述包含
content rejected/spam detected:映射为554 - 部分Exchange配置会透传原生SMTP状态码到错误信息中,可通过正则匹配抽取三位数字状态码。
内容的提问来源于stack exchange,提问作者Mischief
相关产品推荐
相关产品推荐

