如何在 Outlook 2016 c# 中获取用户联系人列表?

How can you get user contact list in Outlook 2016 c#?

我正在尝试显示 outlook 帐户的联系人列表。 (Outlook 2016) 以下代码显示全局联系人列表,但不显示您自己的个人联系人列表。我怎样才能显示帐户地址列表?这是我到目前为止的代码:

            try
            {    
                 Outlook._Application application = new Outlook.Application();

                 Outlook.AddressList addrList = null;

            foreach (Outlook.AddressList oAL in application.Session.AddressLists)
            {
                Outlook.MAPIFolder folder = oAL.GetContactsFolder();
            }

            Outlook.SelectNamesDialog dlg = application.Session.GetSelectNamesDialog();
            dlg.InitialAddressList = addrList;
            dlg.ShowOnlyInitialAddressList = true;
            dlg.NumberOfRecipientSelectors = Outlook.OlRecipientSelectors.olShowTo;

            dlg.Display();

            if (dlg.Recipients.Count > 0)
            {
                foreach (Outlook.Recipient recip in dlg.Recipients)
                {
                    Outlook.PropertyAccessor pa = recip.PropertyAccessor;
                    string smtpAddress = pa.GetProperty(PR_SMTP_ADDRESS).ToString();
                    AddrTextBox.Text += smtpAddress;
                    AddrTextBox.Text += "; ";
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

所以问题是您找不到合适的 AddressList 对象分配给 SelectNamesDialog.InitialAddressList 属性?

你可以使用AddressList.GetContactsFolderAddressList对象转到MAPIFolder对象,但不幸的是没有相应的MAPIFolder.GetAddressList方法(除非你使用Redemption - I am its author - which implements RDOFolder2.GetAddressList),所以最好的办法是遍历 Namespace.AddressLists 集合中的所有地址列表,调用 AddressList.GetContactsFolder。如果您取回有效的 MAPIFolder 对象,请使用 Namespace.CompareEntryIDs.[=23 将其条目 ID (MAPIFolder.EntryID) 与默认联系人文件夹 (Namespace.GetDefaultFolder(olFolderContacts)) 的条目 ID 进行比较=]

之后,深入研究和测试。我找到了我自己问题的答案。如果要显示特定帐户的联系人列表,您只需在第一个 foreach 语句中添加一个 if 语句:

 foreach (Outlook.AddressList oAL in m_AddInModule.OutlookApp.Session.AddressLists)
            {
                Outlook.MAPIFolder folder = oAL.GetContactsFolder();
                 if (folder.AddressBookName == m_AddInModule.ContactsFolder.AddressBookName)
                 {
                     addrList = oAL;
                     break;
                 }
            }         

如果您将其添加到我在初始 post 中编写的代码中。您将成功在 Outlook 中看到当前帐户的联系人。我希望这能像对我一样对你有所帮助。