无法使用C#Interop.Outlook

时间:2019-04-15 08:56:09

标签: c# outlook vsto office-interop

我正在尝试访问Outlook中其他帐户上的垃圾邮件文件夹。 在我的Outlook帐户中,我设置了3个电子邮件帐户,其中2个与工作有关,1个与个人有关。

我使用以下代码设法对主帐户中的电子邮件进行了访问:

ns = Application.GetNamespace("MAPI");
inbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;

这很好用。
但是,当我尝试访问其他帐户时,出现以下错误:

  

System.Runtime.InteropServices.COMException:'由于注册表或安装问题,操作失败。重新启动Outlook,然后重试。如果问题仍然存在,请重新安装。'

     Microsoft.Office.Interop.Outlook.NameSpaceClass.GetSharedDefaultFolder(收件人,OlDefaultFolders FolderType)中的


     在DemoAntiSpam2.ThisAddIn.ThisAddIn_Startup(对象发送方,EventArgs e)中,位于C:\ Projects \ T \ DemoAntiSpam2 \ DemoAntiSpam2 \ ThisAddIn.cs:第29行
     在Microsoft.Office.Tools.AddInImpl.OnStartup()
     在DemoAntiSpam2.ThisAddIn.FinishInitialization()中的C:\ Projects \ T \ DemoAntiSpam2 \ DemoAntiSpam2 \ ThisAddIn.Designer.cs:第57行
     在Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.ExecutePhase(ExecutionPhases执行阶段)      在Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.Microsoft.VisualStudio.Tools.Office.Runtime.Interop.IExecuteCustomization2.ExecuteEntryPoints()

Outlook.NameSpace ns;
Outlook.MAPIFolder inbox;
Outlook.Items items;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    ns = Application.GetNamespace("MAPI");
    var recipient = ns.CreateRecipient(recipientAddress);
    recipient.Resolve();
    if (recipient.Resolved)
    {
        // Code breaks here.
        inbox = ns.GetSharedDefaultFolder(recipient, Outlook.OlDefaultFolders.olFolderInbox);
        items = inbox.Items;
        items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
    }
}

1 个答案:

答案 0 :(得分:0)

我已经设法通过以下方法解决了这个问题:

https://www.codeproject.com

我没有使用GetSharedDefaultFolder()访问文件夹,而是查找了命名空间文件夹的索引:

Outlook.NameSpace ns = Application.GetNamespace("Mapi");
Outlook.MAPIFolder folder = ns.Folders[recipient].Folders["Ongewenste e-mail"];

文件夹名称是您在Outlook中使用的直接名称。您还可以使用EntryId,它是对象的唯一ID。