C# Email1address和iAddress之间的Outlook互操作差异

C# Email1address和iAddress之间的Outlook互操作差异,c#,outlook,office-interop,C#,Outlook,Office Interop,我目前正在使用interop从outlook中获取所有本地联系人。当我第一次对程序进行编程时,我使用了以下代码: Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook.Items outlookI

我目前正在使用interop从outlook中获取所有本地联系人。当我第一次对程序进行编程时,我使用了以下代码:

                Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
                Microsoft.Office.Interop.Outlook.Items outlookItemsCollection;
                MAPIFolder folderContacts = (MAPIFolder)outlookHandler.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
                outlookItemsCollection = folderContacts.Items;

                foreach (var outlookItem in outlookItemsCollection)
                {
                   ContactItem contactItem = outlookItem as ContactItem;
                   //...do something 
                }
获取所有联系人。现在我在使用email1address的emailaddress时遇到了一些问题。我从那里得到了一些奇怪的符号,与我要查找的邮件地址没有太大关系:/o=Companyname/ou=City/cn=Department/cn=x.xyz,最后一部分是邮件地址的第一部分。但是,当我使用contactItem.IMAddress时,我得到了邮件地址,这与我最初期望的Email1地址相同


所以我的问题是:为什么会有这样的差异?应该使用iAddress而不是Email1 Address,还是我忽略了什么?

这两个地址完全不相关。与SMTP相反,Email1Address是一个完全有效的EX-type地址

将GAL条目添加为联系人时,Email1AddressType将为EX。SMTP地址将存储在DASL名称为的命名MAPI属性中http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-0000000000 46}/8084001F。您可以使用ContactItem.PropertyAccessor.GetPorperty访问它


查看该联系人,选择该联系人并单击IMessage按钮

这很有效。尽管有一个问题。有关于属性访问器的文档吗?上一次我试图找出一些关于那些我陷入死胡同的东西时,有些属性记录在MSDN上。对于其他用户,您可以使用OutlookSpy或MFCMAPI查看Outlook的功能。如果您在MAPI中遇到问题标签,您的问题总是会出现堆栈溢出。