Python使用win32com发送Outlook邮件的异常处理实现
问题根因
你的异常捕获完全没覆盖到真正会抛错的代码段:mail.Send()以及Outlook初始化、邮件参数赋值的逻辑全写在try块外面了,这些步骤一旦触发错误,会直接中断程序,根本走不到你写的异常处理分支。
修复方案
把所有和Outlook邮件操作相关的、可能抛出异常的代码全部移入try块监控范围,同时调整异常捕获范围,不要拦截系统级的退出类异常。
修复后的可运行代码如下:
import win32com.client as win32 # 这里替换成你自己的错误处理逻辑 def fonction(): # 示例:写错误日志、触发告警、执行重试等 pass try: # 所有Outlook相关操作全部放在try块内 outlook = win32.Dispatch('outlook.application') mail = outlook.CreateItem(0) mail.To = 'azerty@gmail.com' mail.Subject = 'TEST' mail.Body = 'Hello' mail.Send() # 执行到此处说明发送流程无异常 print("mail sent") except Exception as e: # 捕获所有业务异常,不会弹出原生报错中断程序 print("mail not sent") # 调试阶段可以放开下面这行查看具体错误原因,生产环境可注释 # print(f"错误信息:{str(e)}") fonction()
补充说明
- 不要使用
BaseException做异常捕获,它会拦截键盘中断、程序主动退出等非业务类异常,会导致程序无法正常退出。 - 运行脚本前请确保本地Outlook已经完成账号登录配置,否则初始化Outlook实例的步骤就会抛出异常,上述代码可以正常捕获这类错误。
- 如果遇到Outlook弹出安全提示阻止程序发信,可以在Outlook信任中心设置允许程序访问发送邮件,或者使用管理员权限运行脚本。
内容的提问来源于stack exchange,提问作者Dave Alpes
相关产品推荐
相关产品推荐

