如何在直接模式(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:", "");
}
}
解决方案是打开在线模式或切换到缓存模式。
Outlook 会在发送电子邮件后缓存电子邮件地址,并在我下次尝试在 TO 字段中输入时显示建议。
查看"收件箱"文件夹的相关内容。我想你会在那里找到所需的条目。您可以使用任何低级别(扩展 MAPI)属性查看器,如 MFCMAPI 或 OutlookSpy 来观察隐藏的内容。
此外,您可能会发现如何在缓存 Exchange 模式下使用 Outlook 时配置脱机通讯簿的下载方式一文很有帮助。