如何以直接模式(olCachedOffline)获取交换用户的电子邮件地址?

时间:2014-12-11 05:28:22

标签: c# outlook exchange-server office-interop

Outlook会在发送电子邮件后缓存电子邮件地址,并在下次尝试输入“收件人”字段时显示建议。联系人卡片还显示来自交换的缓存电子邮件地址。

当Outlook处于直接模式时,我无法在代码中检索此电子邮件地址(olCachedOffline即"使用缓存Exchange模式"选项未在Outlook Mail设置中选中),代码抛出异常&#34 ;财产" http://schemas.microsoft.com/mapi/proptag/0x800F101E"是未知的或无法找到。"尝试在地址addressEntry.PropertyAccessor.GetProperty()的两个Schema网址。

这是我正在使用的代码。它在缓存模式下工作正常(在线)。

private string GetExchangeEmail(Outlook.AddressEntry addressEntry)
{
    Outlook.ExchangeUser user = addressEntry.GetExchangeUser();
    string emailAddress = user.PrimarySmtpAddress;
    // return from here if emailAddress is valid 

    string schemaName = string.Empty;
    Outlook.OlExchangeConnectionMode connectionMode = Globals.AddIn.Application.Session.ExchangeConnectionMode;

    if (connectionMode == Outlook.OlExchangeConnectionMode.olCachedConnectedDrizzle ||
        connectionMode == Outlook.OlExchangeConnectionMode.olCachedConnectedFull ||
        connectionMode == Outlook.OlExchangeConnectionMode.olCachedConnectedHeaders ||
        connectionMode == Outlook.OlExchangeConnectionMode.olCachedDisconnected ||
        connectionMode == Outlook.OlExchangeConnectionMode.olCachedOffline)
    {
        // For Direct Mode
        // PR_SMTP_ADDRESS = 0x39FE001E; 
        string FinalEmail = addressEntry.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E") as string;
        return FinalEmail.Replace("SMTP:", "");
    }
    else
    {
        // For Cached Mode
        // PR_EMS_AB_PROXY_ADDRESSES = 0x800F101E;
        string FinalEmail = addressEntry.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x800F101E") as string;
        return FinalEmail.Replace("SMTP:", "");
    }
}

1 个答案:

答案 0 :(得分:0)

解决方案是打开在线模式或切换到缓存模式。

  

Outlook会在发送电子邮件后缓存电子邮件地址,并在下次尝试输入TO字段时显示建议。

查看收件箱文件夹的相关内容。我想你会找到所需的条目。您可以使用任何低级(扩展MAPI)属性查看器(如MFCMAPI或OutlookSpy)来观察隐藏内容。

另外,您可以在缓存Exchange模式文章中找到如何配置脱机通讯簿的下载方式。