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

SelectNamesDialog.InitialAddressList問題は、プロパティに割り当てる正しい AddressList オブジェクトが見つからないことですか?

を使用して 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 に答える