如何获取从文件资源管理器打开的Outlook MailItem文件路径?
关于获取Outlook活动邮件实际存储路径的解答
好问题!咱们先理清Outlook的邮件存储逻辑,再看具体怎么处理:
首先要明确:Outlook中的邮件大多不是以独立文件形式存储的——不管是Exchange邮箱(本地缓存为OST文件)还是PST文件里的邮件,都是作为数据库记录存放在对应的OST/PST容器文件中,单个邮件并没有单独的本地文件路径。
能获取到的信息:
- 邮件所在的OST/PST文件路径:你可以拿到该邮件所属存储文件的完整路径,代码示例如下:
var app = new Microsoft.Office.Interop.Outlook.Application(); var inspector = app.ActiveInspector(); if (inspector?.CurrentItem is MailItem mailItem) { // 获取邮件所在的文件夹 if (mailItem.Parent is Folder folder) { Store store = folder.Store; // 拿到OST/PST文件的路径 string storeFilePath = store.FilePath; Console.WriteLine($"该邮件所在的存储文件路径:{storeFilePath}"); } }
这个路径指向的是整个存储容器,里面包含了该邮箱/数据文件下的所有邮件,但你没法直接定位到单个邮件对应的具体文件位置。
如果需要单个邮件的文件形式:
如果你的需求是要拿到单个邮件的独立文件,只能通过SaveAs方法将邮件导出为MSG格式文件,自己指定存储路径:
var app = new Microsoft.Office.Interop.Outlook.Application(); var inspector = app.ActiveInspector(); if (inspector?.CurrentItem is MailItem mailItem) { // 自定义导出路径 string exportPath = @"C:\Your\Path\To\Save\Email.msg"; // 导出为MSG文件 mailItem.SaveAs(exportPath, Outlook.OlSaveAsType.olMSG); Console.WriteLine($"邮件已导出到:{exportPath}"); }
注意:这不是邮件的原始存储路径,而是你导出后的文件路径。
总结
直接获取活动检查器中打开的邮件的单个实际存储文件路径是做不到的,但你可以获取它所在的OST/PST容器文件路径,或者通过导出操作得到独立的MSG文件路径。
内容的提问来源于stack exchange,提问作者Uladzimir Sharyi




