You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:01