使用 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 中的子文件夹?
无法获取由 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];
最后一行是进入子文件夹并扫描所有电子邮件的魔术投射。谢谢埃里克