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

使用pywin32复制.msg邮件丢失附件及图片问题求助

解决pywin32复制Outlook邮件.msg时附件丢失的问题

你的代码存在几个关键问题,导致附件丢失和COM错误,以下是修正方案:

核心问题分析

  1. 语法错误:

    • pythoncom CoInitialize() 应为pythoncom.CoInitialize()(缺少点号)
    • execpt拼写错误,正确是except
    • 收件人邮箱地址未加引号,应为"exemple@mail.com"
  2. 未正确加载.msg文件:
    代码中未定义draft变量,需要通过namespace.OpenSharedItem()加载本地.msg文件

  3. 附件添加方式错误:
    直接将原邮件的Attachment对象传入Add()方法会触发COM错误,需使用附件的路径名,或通过Copy()方法复制附件到新邮件

  4. HTML正文引用错误:
    draft_path是字符串路径,没有HTMLbody属性,应使用加载后的邮件对象draft.HTMLBody

修正后的代码

import win32com.client as win32
import pythoncom

# 初始化COM环境
pythoncom.CoInitialize()

outlook = win32.Dispatch('Outlook.Application')
namespace = outlook.GetNameSpace('MAPI')

# 加载本地.msg文件
draft_path = "C:\\Users\\Lucas\\Documents\\TESTE.msg"
draft = namespace.OpenSharedItem(draft_path)

# 创建新邮件
message = outlook.CreateItem(0)

# 复制所有附件(包括内嵌图片)
for attachment in draft.Attachments:
    try:
        # 复制附件对象到新邮件(更可靠,支持内嵌图片与HTML的关联)
        attachment.Copy()
        message.Attachments.Paste()
    except Exception as e:
        print(f"添加附件出错: {e}")

# 设置邮件核心信息
message.To = "exemple@mail.com"
message.HTMLBody = draft.HTMLBody
message.Subject = draft.Subject

# 显示邮件(如需直接发送可替换为message.Send())
message.Display()

额外说明

  • 用Copy()+Paste()的方式复制附件,能完整保留内嵌图片与HTML正文的CID关联,避免正文中图片无法显示
  • 运行前确保Outlook已正常启动,且当前用户有权限访问目标.msg文件
  • 若附件是云存储(如OneDrive)中的文件,需先确认文件本地可访问,否则需额外处理云附件的加载逻辑

内容的提问来源于stack exchange,提问作者Lucas Santana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:31