[英]Cannot get folders from Outlook 2016 on a non-default mailbox
我正在尝试使用Microsoft Office Interops列出所有文件夹(以便以后从一个特定的文件夹中获取消息)。
如果我将storeIdx
设置为1(这是我的个人邮箱)运行此代码,则效果很好,但是如果我尝试在storeIdx
2(我也使用的共享邮箱)上运行此storeIdx
,则绝对不会返回任何内容:
private void ProcessMail()
{
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
_NameSpace ns = app.GetNamespace("MAPI");
int storeIdx = 2;
MAPIFolder inbox = ns.Stores[storeIdx].GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Console.WriteLine("Getting folders from mailbox: " + ns.Stores[storeIdx].DisplayName + " in folder " + inbox.Name +"\r\n");
Console.WriteLine("FOLDERS:\r\n");
foreach (MAPIFolder f in inbox.Folders)
{
Console.WriteLine(f.Name + " (" + f.FullFolderPath + ")");
}
}
在各种站点(包括MSDN等)上阅读后,我尝试了几种不同的方法,但是它根本不会显示共享邮箱收件箱中的任何子文件夹。 在Outlook中,我可以看到它们很好并且可以使用它们。
邮箱都在同一台Exchange服务器上。
任何帮助,将不胜感激。
您可以像这样获得所有文件夹:
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
List<Folder> folders = new List<Folder>();
foreach(Folder f in app.Session.Folders)
{
if(ff.DefaultMessageClass.Contains("IPM.Post")
folders.Add(f);
folders.AddRange(GetSubFolders(f));
// Dont forget to release the object cause Outlook don't like too many open obejcts
Marshal.ReleaseComObject(f);
}
GetSubFolders:
public List<Folder> GetSubFolders(Folder f)
{
List<Folder> folders = new List<Folder>();
if(f.Folders.Count > 0)
{
foreach(Folder ff in f.Folders)
{
if(ff.DefaultMessageClass.Contains("IPM.Post")
folders.Add(ff);
folders.AddRange(GetSubFolders(ff));
Marshal.ReleasComObject(ff);
}
}
return folders;
}
我认为GetNamespace obj的集合Stores代表当前配置文件(当前会话)中所有可用的商店。 您可以使用NameSpace.GetSharedDefaultFolder来获取共享邮箱。
参考链接: 获取所有Outlook文件夹和子文件夹的列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.