这是问题所在:
我正在使用带有Interop.Outlook
库的C#。我可以到达我需要扫描的电子邮件所在的共享文件夹,并抓取值输入到分隔的文本文件中,然后传输到电子表格中。
但是目前该程序仅扫描父级共享收件箱文件夹中的电子邮件。我需要的大多数电子邮件都在此文件夹中,但是收件箱中有一些我需要扫描的子文件夹,此时我无法访问。
以下是当前代码:
using Microsoft.Office.Interop;
Outlook.Application app = new Outlook.Application();
Outlook._NameSpace nSpace = app.GetNamespace("MAPI");
Outlook.Recipient recip = nSpace.CreateRecipient("sharedFolderName");
recip.Resolve();
Outlook.MAPIFolder theParent =
nSpace.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderInbox).Parent;
Outlook.MAPIFolder shared =
nSpace.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderInbox);
Outlook.MAPIFolder subFolder =
theParent.Folders["Inbox"].Folders["FolderNameINeedToScan"];
我认为我的问题出在最后一行,我试图删除第二行.Folders
,但这只是获取父收件箱。返回的当前错误是"找不到对象。"我正在寻找的文件夹确实存在。
如何访问Outlook中的子文件夹?
答案 0 :(得分:2)
您无法获取GetSharedDefaultFolder获取的委托文件夹的子文件夹或父文件夹。您需要在所需的Exchange邮箱上授予该用户对Full Mailbox的访问权限,然后将该邮箱添加到当前的Outlook配置文件中。然后,该邮箱中的所有文件夹都将在NameSpace.Stores集合中可用。
如果无法将其他邮箱添加到Outlook配置文件,则可以使用“兑换”登录该邮箱,并在Outlook打开时访问这些文件夹。否则,您可以在Outlook关闭时使用NameSpace.Logon登录到特定的邮箱。
答案 1 :(得分:-2)
这是通过使用Eric在答案中给我的提示来解决的。
我不得不改变我使用的nameSpace
。最初我用过
Outlook.Application app = new Outlook.Application();
Outlook._NameSpace nSpace = app.GetNamespace("MAPI");
Outlook.Recipient recip = nSpace.CreateRecipient("name of recipient");
然后我会使用收件人创建对共享收件箱的访问权限。但是我无法访问该收件箱中的子文件夹。感谢Eric,我改用了这个:
Outlook._NameSpace nSpace = app.GetNamespace("MAPI");
Outlook.Stores theStore = nSpace.Stores;
Folders subFolder = recip.Parent.Folders;
dynamic email;
for(int i = 1; i<= subFolder.GetFirst().Folders["folderName"].Folders["subFolderName"].Items.Count; i++)
{
email = subFolder.GetFirst().Folders["folderName].Folders["subFolderName"].Items[i];
最后一行是进入子文件夹并扫描所有电子邮件的魔法演员。 谢谢Eric