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

Python遍历文件夹邮件并存入字典的代码问题求助

问题分析与解决方案

两个核心问题

  1. 未定义msg变量:首次代码直接调用msg.To等属性,但未创建msg对象,必然报错。必须通过outlook.OpenSharedItem()打开目标邮件文件,才能获取邮件对象。
  2. 数据被覆盖:修改后每次循环都重新赋值data = pd.DataFrame(...),前一次循环的结果会被覆盖,最终仅保留最后一封邮件的数据。需先将所有邮件数据收集到列表,再统一转换为DataFrame。

修正后的完整代码

import win32com.client
import pandas as pd
import datetime
import os

# 邮件文件夹路径
folder = r'C:\Users\XX\Desktop\Emails'
# 结果保存路径
result_folder = r'C:\Users\XX\Desktop\Result'

# 初始化Outlook
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

# 初始化空列表,存储所有邮件的信息字典
email_data_list = []

# 遍历文件夹中的所有文件
for filename in os.listdir(folder):
    # 仅处理.msg格式的邮件文件(避免处理非邮件文件)
    if filename.endswith('.msg'):
        print(f"正在处理:{filename}")
        # 拼接完整文件路径
        full_file_path = os.path.join(folder, filename)
        # 打开邮件获取msg对象
        msg = outlook.OpenSharedItem(full_file_path)
        
        # 整理当前邮件信息为字典
        email_info = {
            'Filename': filename,
            'To': msg.To,
            'Cc': msg.Cc,
            'From': msg.SenderName,
            'Subject': msg.Subject,
            'Body': msg.Body,
            'SentDateTime': datetime.datetime.fromtimestamp(
                timestamp=msg.SentOn.timestamp(), 
                tz=msg.SentOn.tzinfo
            ).strftime('%Y-%m-%d %H:%M')
        }
        
        # 将字典添加到列表
        email_data_list.append(email_info)

# 将列表转换为DataFrame
data = pd.DataFrame(email_data_list)

# 保存结果到指定文件夹(可选)
os.makedirs(result_folder, exist_ok=True)
data.to_csv(os.path.join(result_folder, 'email_summary.csv'), index=False, encoding='utf-8-sig')
print(f"处理完成,共获取{len(data)}封邮件数据")

关键说明

  • 完整路径拼接:os.listdir()仅返回文件名,需用os.path.join()拼接文件夹路径,确保Outlook能找到正确的邮件文件。
  • 数据收集逻辑:用列表存储每个邮件的字典,避免循环中覆盖DataFrame,保证所有数据被保留。
  • 文件过滤:通过endswith('.msg')跳过非邮件文件,避免无关文件引发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:07:37