如何批量将文件夹内的Outlook MSG文件内容导出为CSV文件
批量导出Outlook MSG文件信息到CSV的实现方案
200个文件的量级处理成本极低,以下方案全程无需手动打开单封邮件操作,单批次运行耗时不超过1分钟。
方案1:Windows环境无额外依赖(推荐,解析准确率100%)
该方案调用桌面版Outlook原生COM接口解析MSG,不会出现编码识别错误、格式错乱问题,只要系统已安装配置好桌面版Outlook即可使用。
操作步骤:
- 将所有MSG文件统一放入单独文件夹,例如路径为
C:\MailExport\msg_files - 在文件夹内新建文本文件,将后缀改为
.ps1,命名为Export-MsgToCsv.ps1 - 将以下代码粘贴到文件中,替换为你自己的文件夹路径后保存:
$outlook = New-Object -ComObject Outlook.Application $msgFolder = "C:\MailExport\msg_files" # 替换为实际MSG存放路径 $outputCsv = "C:\MailExport\mails_export.csv" # 替换为CSV输出路径 $mails = @() Get-ChildItem -Path $msgFolder -Filter "*.msg" | ForEach-Object { $mail = $outlook.Session.OpenSharedItem($_.FullName) $mails += [PSCustomObject]@{ FileName = $_.Name Subject = $mail.Subject SenderEmail = $mail.SenderEmailAddress SenderName = $mail.SenderName ToRecipients = $mail.To CcRecipients = $mail.CC BccRecipients = $mail.BCC SendTime = $mail.SentOn ReceiveTime = $mail.ReceivedTime PlainTextBody = $mail.Body HtmlBody = $mail.HTMLBody AttachmentCount = $mail.Attachments.Count } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($mail) | Out-Null } $mails | Export-Csv -Path $outputCsv -Encoding UTF8 -NoTypeInformation [System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null [GC]::Collect() [GC]::WaitForPendingFinalizers() Write-Host "导出完成,共处理 $($mails.Count) 封邮件,文件已保存至 $outputCsv"
- 右键点击该ps1文件,选择「使用PowerShell运行」,等待执行完成即可拿到目标CSV文件。
注意:脚本运行时不要操作Outlook界面,避免接口调用中断。
方案2:跨平台无Outlook依赖方案(Python实现)
如果使用Mac/Linux系统,或本地未安装桌面版Outlook,可以用Python第三方库解析MSG文件,无需依赖Office组件。
操作步骤:
- 打开终端/命令提示符,执行命令安装依赖:
pip install extract-msg pandas - 新建py后缀的脚本文件,粘贴以下代码,替换对应路径后运行:
import os import pandas as pd import extract_msg msg_folder = r"/path/to/your/msg/files" # 替换为MSG存放路径 output_csv = r"/path/to/your/output/mails_export.csv" # 替换为CSV输出路径 mail_list = [] for file_name in os.listdir(msg_folder): if file_name.lower().endswith(".msg"): file_path = os.path.join(msg_folder, file_name) with extract_msg.openMsg(file_path) as msg: mail_list.append({ "FileName": file_name, "Subject": msg.subject, "Sender": msg.sender, "ToRecipients": msg.to, "CcRecipients": msg.cc, "SendTime": msg.date, "PlainTextBody": msg.body, "AttachmentCount": len(msg.attachments) }) df = pd.DataFrame(mail_list) df.to_csv(output_csv, index=False, encoding="utf-8-sig") print(f"导出完成,共处理{len(mail_list)}封邮件")
- 脚本运行完成后即可在指定路径得到CSV文件,
utf-8-sig编码可保证Excel打开中文内容无乱码。
常见问题说明
- 若导出正文出现乱码:优先使用方案1的原生Outlook解析,第三方开源库对特殊编码、多语种邮件的识别准确率低于官方接口。
- 若需要同步提取附件:两个方案都可扩展附件保存逻辑,200个文件量级无需额外做性能优化,顺序处理即可稳定运行。
- 若CSV打开后换行错乱:不要直接双击打开文件,通过Excel的「数据-自文本/CSV」功能选择UTF-8编码导入即可正常显示。
内容的提问来源于stack exchange,提问作者eskay
相关产品推荐
相关产品推荐

