使用 C# 从 Outlook 中的共享文件夹阅读电子邮件

本文关键字:文件夹 共享文件 电子邮件 共享 Outlook 使用 | 更新日期: 2023-09-27 18:34:02

这是问题所在:

我正在将 C# 与 Interop.Outlook 库一起使用。我可以访问电子邮件所在的共享文件夹,我需要扫描并获取值以输入到分隔文本文件中以传输到电子表格中。

但是,目前该程序仅扫描父级别共享收件箱文件夹中的电子邮件。我需要的大多数电子邮件都在此文件夹中,但是收件箱中有几个子文件夹我需要扫描,目前无法访问。

这是当前代码:

 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 中的子文件夹?

使用 C# 从 Outlook 中的共享文件夹阅读电子邮件

无法获取由 GetSharedDefaultFolder 获取的委托文件夹的子文件夹或父文件夹。 您需要让该用户授予对所需 Exchange 邮箱的完全邮箱访问权限,然后将该邮箱添加到当前 Outlook 配置文件。 然后,该邮箱中的所有文件夹都将在 NameSpace.Stores 集合中可用。

如果无法将另一个邮箱添加到 Outlook 配置文件,则可以使用"兑换"登录到该邮箱,并在 Outlook 打开时访问文件夹。 否则,您可以在 Outlook 关闭时使用 NameSpace.Logon 登录到特定邮箱。

这是通过使用埃里克在他的答案中给我的提示来解决的。

不得不改变我正在使用的nameSpace。最初我用

Outlook.Application app = new Outlook.Application();
Outlook._NameSpace nSpace = app.GetNamespace("MAPI");
Outlook.Recipient recip = nSpace.CreateRecipient("name of recipient");

然后,我将使用收件人创建对共享收件箱的访问权限。但是,我无法访问该收件箱中的子文件夹。多亏了埃里克,我切换到了这个:

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];

最后一行是进入子文件夹并扫描所有电子邮件的魔术投射。谢谢埃里克