是否以编程方式从Exchange Outlook联系人获取Internet电子邮件地址?

是否以编程方式从Exchange Outlook联系人获取Internet电子邮件地址?,outlook,Outlook,我正在尝试从Exchange连接的Outlook中读取Internet格式的地址。我从Outlook联系人中读取所有联系人,即不从全局通讯簿(GAB)读取,问题是对于Exchange GAB中存储在联系人中的所有用户,我只读取了X.500格式的地址,这在本例中没有用处。对于不在Exchange服务器域中的所有手动添加的联系人,将按预期导出Internet地址 基本上,我使用了以下代码段来枚举联系人: static void Main(字符串[]args) { var outlookApplica

我正在尝试从Exchange连接的Outlook中读取Internet格式的地址。我从Outlook联系人中读取所有联系人,即不从全局通讯簿(GAB)读取,问题是对于Exchange GAB中存储在联系人中的所有用户,我只读取了X.500格式的地址,这在本例中没有用处。对于不在Exchange服务器域中的所有手动添加的联系人,将按预期导出Internet地址

基本上,我使用了以下代码段来枚举联系人:

static void Main(字符串[]args)
{
var outlookApplication=新应用程序();
NameSpace mapiNamespace=outlookApplication.GetNamespace(“MAPI”);
MAPIFolder contacts=mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
对于(int i=1;i

是否有任何方法可以提取Internet地址而不是X.500?

您需要将
ContactItem
转换为
AddressEntry
——一次转换一个电子邮件地址

为此,您需要通过
收件人
对象模型访问
地址条目
。检索实际收件人的唯一方法是通过

const字符串Email1EntryIdPropertyAccessor=”http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-0000000000 46}/80850102”;
字符串地址=string.Empty;
Outlook.Folder Folder=此.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)作为Outlook.Folder;
foreach(文件夹.Items.Cast()中的var contact,其中(c=>!string.IsNullOrEmpty(c.Email1EntryID)))
{
Outlook.PropertyAccessor PropertyAccessor=contact.PropertyAccessor;
对象rawPropertyValue=propertyAccessor.GetProperty(Email1EntryPropertyAccessor);
字符串RecipientRyId=propertyAccessor.BinaryToString(rawPropertyValue);
Outlook.Recipient-Recipient=this.Application.Session.GetRecipientFromID(RecipientRyId);
if(recipient!=null&&recipient.Resolve()&&recipient.AddressEntry!=null)
address=recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
}

这一问题得到解答已经有一段时间了。您能否指导我如何修改上述代码以获取
Email2EntryID
Email3EntryID
?我一直在互联网上寻找他们的guid(看起来这是唯一的区别),但还没有找到。没关系。在我发布问题的那一刻,我找到了一个同时具有两个ID的Microsoft页面。对它感兴趣的人,只需将最后一部分(80850102)更改为80950102(对于Email2)和80A50102(对于Email3)。