读取Outlook邮件遇异常:.pst正常但.ost文件中myEmail为空求助
解决Outlook OST文件读取时myEmail为null的问题
用户使用以下C#代码读取Outlook的PST/OST文件,读取PST文件时运行正常,但读取OST文件时myEmail返回null:
Outlook.Application myApp = new Outlook.Application(); Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); // Get the email account root folder Outlook.MAPIFolder myEmail = mapiNameSpace.Folders[textBox_EmailBody_Account.Text.Trim()]; // Get the specific subfolder Outlook.MAPIFolder emailFolder = (Outlook.MAPIFolder)myEmail.Folders[textBox_EmailBody_Folder.Text.Trim()];
问题原因及解决方法
OST文件的特殊性
OST是Exchange账户的离线缓存文件,并非独立存储容器,必须关联到当前Outlook配置的Exchange账户才能访问。它不会像PST那样作为独立条目出现在mapiNameSpace.Folders集合中,直接通过账户名称索引获取必然失败。获取OST对应的根文件夹
- 获取默认Exchange邮箱根文件夹
直接通过默认收件箱的父文件夹获取OST的根目录:Outlook.Application myApp = new Outlook.Application(); Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); // 获取OST根文件夹(默认Exchange邮箱的根) Outlook.MAPIFolder myEmail = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Parent; // 获取子文件夹 Outlook.MAPIFolder emailFolder = (Outlook.MAPIFolder)myEmail.Folders[textBox_EmailBody_Folder.Text.Trim()]; - 遍历账户匹配Exchange账户
如果需要指定特定Exchange账户,可遍历账户集合筛选:Outlook.Application myApp = new Outlook.Application(); Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); Outlook.MAPIFolder myEmail = null; // 遍历所有账户找Exchange类型 foreach (Outlook.Account account in mapiNameSpace.Accounts) { if (account.AccountType == Outlook.OlAccountType.olExchange) { // 获取该账户对应的OST根文件夹 myEmail = account.DeliveryStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Parent; break; } } if (myEmail != null) { Outlook.MAPIFolder emailFolder = (Outlook.MAPIFolder)myEmail.Folders[textBox_EmailBody_Folder.Text.Trim()]; // 后续操作 }
- 获取默认Exchange邮箱根文件夹
确保OST已在Outlook中加载
目标OST必须是当前Outlook配置文件正在使用的缓存文件,若OST属于其他配置文件,需先切换配置文件:// 替换为目标配置文件的名称 mapiNameSpace.Logon("目标配置文件名", System.Reflection.Missing.Value, false, true);验证子文件夹名称准确性
确保textBox_EmailBody_Folder.Text中的名称与Outlook中OST文件夹的显示名称完全一致(包括大小写、空格),避免因名称不匹配导致获取失败。
内容的提问来源于stack exchange,提问作者John Lee
相关产品推荐
相关产品推荐

