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

使用win32com.client操作Outlook无法获取邮件正文,求解决方案

解决方法

核心逻辑

Outlook 邮件对象(MailItem)内置两个正文相关属性,可直接调用:

  • 纯文本格式正文:Item.Body
  • HTML格式带样式正文:Item.HTMLBody

修正后可运行完整代码(包含正文提取、存入DataFrame、导出Excel功能)

import win32com.client
import os
import pandas as pd

Outlook = win32com.client.Dispatch("Outlook.Application")
olNs = Outlook.GetNamespace("MAPI")
Inbox = olNs.GetDefaultFolder(6)

Filter = "[Subject] = 'John Doe Test Results'"
Items = Inbox.Items.Restrict(Filter)

# 先判断是否筛选到符合条件的邮件,避免空值报错
if Items.Count == 0:
    print("未找到符合主题的邮件")
else:
    Item = Items.GetFirst()
    # 提取并打印邮件正文
    mail_body = Item.Body
    print("="*30 + "邮件正文开始" + "="*30)
    print(mail_body)
    print("="*30 + "邮件正文结束" + "="*30)

    # 下载附件(修正原路径拼接错误,避免文件夹名和文件名直接拼接无分隔符的问题)
    save_path = r"C:\Users\Conrad\Desktop\test\New folder"
    # 先判断保存路径是否存在,不存在就创建
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    for attachment in Item.Attachments:
        print(f"正在下载附件:{attachment.FileName}")
        attachment.SaveAsFile(os.path.join(save_path, attachment.FileName))

    # 正文存入DataFrame并导出Excel
    df = pd.DataFrame({
        "邮件主题": [Item.Subject],
        "发件人": [Item.SenderName],
        "收件时间": [Item.ReceivedTime],
        "邮件正文": [mail_body]
    })
    # 导出到指定路径,需要提前安装openpyxl依赖:pip install openpyxl
    df.to_excel(os.path.join(save_path, "邮件内容汇总.xlsx"), index=False)

注意事项

  • 若需要提取带格式的正文用于保留样式写入Excel,可将Item.Body替换为Item.HTMLBody
  • 如果有多封符合筛选条件的邮件,可遍历Items对象批量处理,不需要只取GetFirst()
  • 导出Excel前请确保已经安装openpyxl依赖库,否则xlsx格式文件导出会失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:09:03