如何在直接模式(olCachedOffline)下为交换用户获取电子邮件地址

本文关键字:交换 用户 获取 电子邮件地址 直接模式 olCachedOffline | 更新日期: 2023-09-27 18:33:52

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

当 Outlook 处于直接模式时,我无法在代码中检索此电子邮件地址(olCachedOffline,即在 Outlook 邮件设置中未选中"使用缓存 Exchange 模式"选项),代码引发异常"属性"http://schemas.microsoft.com/mapi/proptag/0x800F101E"未知或找不到。

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

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:", "");
    }
}

如何在直接模式(olCachedOffline)下为交换用户获取电子邮件地址

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

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

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

此外,您可能会发现如何在缓存 Exchange 模式下使用 Outlook 时配置脱机通讯簿的下载方式一文很有帮助。