0

我正在尝试显示 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);
        }
4

2 回答 2

1

所以问题是你找不到正确的 AddressList 对象来分配给SelectNamesDialog.InitialAddressList属性?

您可以使用 .从 AddressList 对象转到 MAPIFolder 对象AddressList.GetContactsFolder,但遗憾的是没有对应的 MAPIFolder.GetAddressLIst(除非您使用实现RDOFolder2 .GetAddressList 的Redemption),因此您可以做的最好的事情是遍历集合中的所有地址列表,打电话。如果您返回一个有效对象,请使用 比较其条目 id ( ) 与默认联系人文件夹 ( )的条目 id 。Namespace.AddressListsAddressList.GetContactsFolderMAPIFolderMAPIFolder.EntryIDNamespace.GetDefaultFolder(olFolderContacts)Namespace.CompareEntryIDs

于 2016-02-12T16:11:24.710 回答
0

之后,四处挖掘研究和测试。我已经找到了我自己的问题的答案。如果要显示特定帐户的联系人列表,只需在第一个 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;
                 }
            }         

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

于 2016-02-15T15:47:17.180 回答