Outlook Interop AddressEntry异常

时间:2010-12-11 13:50:40

标签: interop outlook

我编写了一个outlook插件,用于检索发件人的邮件项目的SMTP电子邮件地址。它在大多数机器上工作正常,但是,我有一台机器(我的新开发机器)每次尝试解析来自交换用户的电子邮件的SMTP地址时都会抛出COMException。以下是我正在使用的代码...

private string SenderEmail(MailItem item)
{
    if (item == null)
    {
        return "";
    }
    else
    {
        string senderEmail = string.Empty;

        if (item.SenderEmailType.ToUpper() == "EX")
            senderEmail = GetEmailAddressFromOU(item.SenderEmailAddress);
        else
            senderEmail = item.SenderEmailAddress;

         return senderEmail;
    }
}

private string GetEmailAddressFromOU(string ouName)
{
    string emailAddress = string.Empty;

    NameSpace oNS = ((Microsoft.Office.Interop.Outlook.Application)OutlookAppObj).GetNamespace("MAPI");
    Recipient recip = oNS.CreateRecipient(ouName);
    recip.Resolve();
    ExchangeUser exUser = recip.AddressEntry.GetExchangeUser();

    emailAddress = exUser.PrimarySmtpAddress;

    Marshal.ReleaseComObject(exUser);
    Marshal.ReleaseComObject(recip);
    Marshal.ReleaseComObject(oNS);

    return emailAddress;
}

访问Recipient对象的AddressEntry属性时发生以下COMException:

消息=“尝试的操作失败。无法找到对象。

我正在使用Windows 7(64位),使用Outlook 2010,但是这个相同的代码适用于具有相同操作系统和Outlook版本的其他计算机。它也适用于我以前的开发机器,也就是Windows 7(32位)和Outlook 2010。

我搜索了StackOverflow和Google的任何分辨率,但没有找到任何分辨率。

有人能解释一下这个问题吗?

2 个答案:

答案 0 :(得分:0)

仍然不确定导致问题的原因,但删除Outlook中的所有电子邮件帐户并重新添加它们,修复了问题。

答案 1 :(得分:0)

要解决帐户问题,请尝试删除OST文件。 此链接说明了如何执行此操作:
http://social.technet.microsoft.com/Forums/en/w7itprogeneral/thread/d8fe1d52-4f95-4158-ab2f-13cab5cbabf9