VSTO Outlook Add-in如何获取已打开.msg文件的完整文件名?
在VSTO Add-in中获取打开的.msg文件完整路径
核心方案:通过PropertyAccessor读取MAPI属性
当从文件系统打开.msg文件时,对应的MailItem对象存在特定MAPI属性可获取原文件路径,具体实现步骤如下:
获取当前打开的
MailItem实例:
可通过Application.ActiveInspector().CurrentItem获取当前检查器中的项目,或在Application.ItemLoad事件中捕获加载的项目。使用PropertyAccessor读取目标属性:
关键属性为PR_PATHNAME_W,对应MAPI标签0x0047001F,命名空间URL为http://schemas.microsoft.com/mapi/proptag/0x0047001F。示例代码:
Outlook.MailItem mailItem = Application.ActiveInspector().CurrentItem as Outlook.MailItem; if (mailItem != null) { try { Outlook.PropertyAccessor propAccessor = mailItem.PropertyAccessor; string fullFilePath = propAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0047001F").ToString(); // 此处可使用fullFilePath变量 } catch (Exception) { // 若项目不是从本地文件打开(如Outlook文件夹中的邮件),该属性不存在,需处理异常 } }备选属性:
若上述属性无法获取路径,可尝试PR_ORIGINAL_FILE_NAME_W,对应MAPI标签0x3707001F,命名空间URL为http://schemas.microsoft.com/mapi/proptag/0x3707001F。
注意事项
- 该属性仅在直接从文件系统打开
.msg文件时存在,从Outlook邮箱/文件夹打开的邮件不会包含此属性。 - 使用OutlookSpy验证时,需打开目标
.msg文件后切换到PropertyAccessor标签,搜索对应的MAPI标签(如0x0047001F)即可找到该属性。
内容的提问来源于stack exchange,提问作者Funny Paul
相关产品推荐
相关产品推荐

