#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