Python调用Outlook发送邮件执行mail.Send()报com_error错误如何解决
Python调用Outlook发送邮件报错(-2147467260 Operation aborted)的原因与解决方案
报错原因
- 代码存在拼写错误:实例化Outlook的对象名为
OlaApp,后续调用时错误写成olApp、ol.App,变量名不匹配;附件添加属性拼写错误,正确属性为Attachments,代码中写为Attachements,错误的调用会触发COM层操作异常。 - Outlook安全策略拦截:Outlook默认会拦截非信任程序的自动发送操作,避免恶意程序批量发送垃圾邮件,可预览但无法发送是该类拦截的典型表现。
- 必填参数缺失:代码中
mail.To收件人地址为空,不满足邮件发送的必填要求,会触发发送操作中止。 - 权限或运行状态异常:Python和Outlook的运行权限不一致(比如一个以管理员身份运行,一个以普通用户身份运行)、Outlook未登录账户处于离线状态、待添加的附件文件被其他程序占用,都会导致该报错。
解决方案
- 先修正代码拼写与必填参数问题,参考修正后代码如下:
import win32com.client as win32 import time # 统一变量名 olApp = win32.Dispatch('Outlook.Application') olNS = olApp.GetNameSpace('MAPI') # 修正对象调用错误 mail = olApp.CreateItem(0) # 填写正确的收件人地址,不可留空 mail.To = 'xxx@xxx.com' mail.Subject = '邮件主题' mail.Body = '邮件正文内容' # 修正附件属性拼写 mail.Attachments.Add(max_file) # 若需要预览,可加短暂延迟后关闭预览窗口再发送,避免界面资源占用 mail.Display() time.sleep(1) mail.GetInspector.Close(0) mail.Send()
- 调整Outlook安全策略:打开Outlook后依次进入「文件」→「选项」→「信任中心」→「信任中心设置」→「编程访问」,选择「从不向我发出可疑活动警告」(企业设备请先确认符合公司IT管理政策),同时确保Python和Outlook的运行权限一致。
- 发送前确认附件状态:确保
max_file对应的本地文件未被其他程序打开占用,文件路径正确且当前运行的Python程序有该文件的读取权限。 - 提前打开Outlook并登录账户,确保Outlook处于在线正常运行状态,不要处于离线、未激活、无响应的状态。
内容的提问来源于stack exchange,提问作者Arvind Kumar Yadav
相关产品推荐
相关产品推荐

