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

使用Python获取Outlook邮件并保留原始显示格式的问题咨询

问题原因

你当前的写法本质是把邮件的纯文本字段手动写入文件,手动修改后缀为.msg并不会生成符合Outlook规范的邮件文件,message.body本身就是Outlook自动提取的纯文本正文,天生丢失HTML排版、表格、样式,自然会有格式缺失。

可行解决方案

方案1:保存为原生Outlook .msg格式(完全保留所有邮件属性,包括格式、附件、头信息)

直接调用win32com内置的SaveAs方法生成标准.msg文件,不需要手动拼接内容:

import win32com.client
import os
import re

# 初始化Outlook客户端
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# 这里替换为你自己的邮件文件夹获取逻辑,和你之前的代码保持一致即可
inbox = outlook.GetDefaultFolder(6) # 6对应收件箱
messages_1 = inbox.Items

# 处理文件名非法字符的工具函数
def sanitize_filename(filename):
    return re.sub(r'[\\/*?:"<>|]', "", filename)

# 批量保存msg文件
save_path = "./outlook_mails/msg/"
os.makedirs(save_path, exist_ok=True)

olMSG = 3 # Outlook常量,代表msg格式
for idx, message in enumerate(messages_1):
    # 生成合法文件名,用序号+主题+时间避免重名
    subject = sanitize_filename(message.Subject)
    receive_time = message.ReceivedTime.strftime('%Y%m%d_%H%M%S')
    file_name = f"{idx+1}_{receive_time}_{subject}.msg"
    full_path = os.path.join(save_path, file_name)
    # 直接调用SaveAs方法保存为标准msg
    message.SaveAs(full_path, olMSG)

保存后的.msg文件可以直接用Outlook打开,和你在Outlook里看到的格式完全一致,附件也会保留。

方案2:保存为HTML格式(无需Outlook即可打开,保留所有排版、表格、样式)

如果不需要保留邮件头、附件等元数据,只需要保留正文排版,可以用HTMLBody属性直接保存为HTML文件:

# 其他初始化逻辑和上面一致
save_path = "./outlook_mails/html/"
os.makedirs(save_path, exist_ok=True)

for idx, message in enumerate(messages_1):
    subject = sanitize_filename(message.Subject)
    receive_time = message.ReceivedTime.strftime('%Y%m%d_%H%M%S')
    file_name = f"{idx+1}_{receive_time}_{subject}.html"
    full_path = os.path.join(save_path, file_name)
    # 写入HTML正文,编码用utf-8避免乱码
    with open(full_path, 'w', encoding='utf-8') as f:
        # 可以自定义加上主题、时间等头信息
        f.write(f"<h1>{message.Subject}</h1>")
        f.write(f"<p>收件时间:{message.ReceivedTime.strftime('%Y-%m-%d %H:%M:%S')}</p>")
        f.write("<hr>")
        f.write(message.HTMLBody)

保存后的HTML文件可以直接用浏览器打开,所有HTML格式、表格、样式都会完整保留。

注意事项

  • 如果邮件里有嵌入式图片,HTML格式保存后本地打开可能看不到图片,需要额外把嵌入式附件导出并替换HTML里的cid引用即可。
  • 批量保存时一定要处理文件名的非法字符,不然遇到带特殊符号的邮件主题会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:03