使用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
相关产品推荐
相关产品推荐

