Возвращает список имен и адресов электронной почты из Outlook в vb.net поле со списком

#vb.net #email #outlook #vb.net-2010 #import-contacts

#vb.net #Адрес электронной почты #outlook #vb.net-2010 #импорт-контакты

Вопрос:

Я хочу вернуть из outlook список имен и адресов электронной почты и заполнить их в списке, чтобы я мог выбрать те, которые я хочу.

Я хочу сделать это из локального списка контактов пользователей, а также из глобального списка адресов на сервере Exchange.

Я видел много примеров (ниже), и ничего не работает, поэтому любая помощь будет приветствоваться.

Спасибо

Грэм

Я использую

 Imports Microsoft.Office.Interop.Outlook
Imports Microsoft.Office.Interop
 

для обоих примеров:

  Dim itemx As ListViewItem

        'Create an Outlook application.
        Dim oApp As Outlook._Application = New Outlook.Application()

        ' Get the MAPI namespace.
        Dim oNS As Outlook.NameSpace = oApp.Session
        ' Get the Global Address List.
        Dim oALs As Outlook.AddressLists = oNS.AddressLists
        Dim oGal As Outlook.AddressList = oALs.Item("Global Address List")

        ' Get all the entries.
        Dim oEntries As Outlook.AddressEntries = oGal.AddressEntries
        ' Get the first user.
        Dim oEntry As Outlook.AddressEntry = oEntries.GetFirst

        For i As Long = 1 To 10 ' Cut down to 100 as I dont want to load the full AB ** Need to Search rather than Loop **
            If oEntries(i).DisplayType = Outlook.OlDisplayType.olUser Then
                itemx = ListView1.Items.Add(oEntries(i).Name)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.JobTitle)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.BusinessTelephoneNumber)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.OfficeLocation)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.PrimarySmtpAddress)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.CompanyName)
                itemx.SubItems.Add(oEntries(i).GetExchangeUser.Alias)
            End If
        Next

        ' Clean up.
        oApp = Nothing
        oNS = Nothing
        oALs = Nothing
        oGal = Nothing
        oEntries = Nothing
        oEntry = Nothing
 

Также пробовал:

 ' Create Outlook application.
Dim oApp As Outlook.Application = New Outlook.Application()
'Get NameSpace and Logon.
Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")
'oNS.Logon("Outlook", , False, True) ' TODO:
oNS.Logon("Outlook", Nothing, False, True)
' Get the first contact from the Contacts folder.
Dim cContacts As Outlook.MAPIFolder = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
Dim oItems As Outlook.Items = cContacts.Items
Dim oCt As Outlook.ContactItem

Try
  oCt = oItems.GetFirst()
  ' Display some common properties.
  ListBox1.Items.Add(oCt.FullName)
  ListBox1.Items.Add(oCt.Title)
  ListBox1.Items.Add(oCt.Birthday)
  ListBox1.Items.Add(oCt.CompanyName)
  ListBox1.Items.Add(oCt.Department)
  ListBox1.Items.Add(oCt.Body)
  ListBox1.Items.Add(oCt.FileAs)
  ListBox1.Items.Add(oCt.Email1Address)
  ListBox1.Items.Add(oCt.BusinessHomePage)
  ListBox1.Items.Add(oCt.MailingAddress)
  ListBox1.Items.Add(oCt.BusinessAddress)
  ListBox1.Items.Add(oCt.OfficeLocation)
  ListBox1.Items.Add(oCt.Subject)
  ListBox1.Items.Add(oCt.JobTitle)
  Catch
      ListBox1.Items.Add("an error occurred")
     'Finally

     ' Display
     'oCt.Display(True)
     ' Log off.
     oNS.Logoff()
    ' Clean up.
     oApp = Nothing
     oNS = Nothing
     oItems = Nothing
     oCt = Nothing
  End Try
 

Комментарии:

1. Пожалуйста, покажите, что у вас есть на данный момент. Кроме того, вы столкнетесь с проблемами с защитой объектной модели Outlook, если вы не запускаете это из надстройки VSTO и не используете ссылку на объект приложения, предоставляемый через эту инфраструктуру.

2. Это не обязательно должен быть надстройка VSTO. Любая надстройка COM является доверенной. Вы также можете использовать расширенный MAPI (C или Delphi) или Redemption (любой язык), чтобы избежать запросов безопасности.

3. Отредактированный пост, чтобы показать код, также что такое VSTO?

Ответ №1:

Похоже, что пример кода в вашем первом примере верен, за исключением строки доступа к «Глобальному списку адресов». Попробуйте использовать 1 в качестве индекса массива:

 Dim oGal As AddressList = oALs.Item(1)
 

Я смог получить доступ к своим контактам, сделав это.

Комментарии:

1. Да, это сработало, как я могу получить количество возвращенных записей, поскольку код ограничил его 10?

2. Кроме того, как я могу получить свой личный список контактов, а не глобальный список адресов?

3. Я не совсем уверен, что вы подразумеваете под количеством возвращенных записей ..? Вы хотите знать, сколько их всего? Попробуйте либо oEntries.Count или oEntries.Length

Ответ №2:

Затемнить oGal как AddressList = oALs.Элемент (x) // <— x представляет каждую папку, глобальную, контакты, общедоступную и т. Д.

Ответ №3:

Это работает для меня:

  Dim oGal As Outlook.AddressList = oNS.GetGlobalAddressList