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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:45:45