Outlookdaten auslesen
von Björn Kirsch
Übersicht
Der Zweck dieses Tutorials
Über die Microsoft-Produktreihe stehen den heutigen Programmierer viele Features zur Verfügung, die im Zeitalter von MS-DOS noch undenkbar waren. Heute können die Anwendungen Word und Excel über die Microsoft Object Library einfach in die eigenen Programme integriert werden.
Mit freundlichen Grüßen
Björn Kirsch
Voraussetzungen
Bevor Outlook in das eigene Programm integriert werden kann, muß folgende Objektlibrary eingebunden werden:
- Microsoft Outlook 8.0 Object Library
Erklärung anhand des Beispielprojekts
Option Explicit ' Nachfolgend werden zwei komplette Objekte ' für die Outlook.Application angelegt; diese ' Vorgehensweise ist notwendig, da das Programm ' Kontakte und eMails parallel öffnen können ' soll. In diesem Tutorial ist eigentlich nur ' die ständige Verwendung des Mailobjekts (alle ' Objekte, die mit "Mobj" beginnen, notwendig. ' Allerdings wird das Kontaktobjekt nicht geschlossen, ' da das Listing einfach um die eigenen Wünsche ' erweiterbar sein soll. Dim KobjOutlook As Outlook.Application ' Outlook wird als Objekt festgelegt ' Bitte beachten: unter Verweise "Projekt / Verweise" ' muß "Microsoft Outlook 8.0 Object Lib." angebunden ' sein Dim KobjNS As NameSpace ' mit den Namespaces wird der aktuelle Arbeitsbereich ' von Outlook festgelegt und stellt Methoden zur ' An- und Abmeldung in Outlook bereit. Dim KobjMF As MAPIFolder ' der MAPI-Folder legt den Ordner fest (z. B. Kontakte) Dim KobjIt As Items ' die Items sind die einzelnen Einträge Dim MobjOutlook As Outlook.Application ' Outlook wird als Objekt festgelegt ' Bitte beachten: unter Verweise "Projekt / Verweise" ' muß "Microsoft Outlook 8.0 Object Lib." angebunden ' sein Dim MobjNS As NameSpace ' mit den Namespaces wird der aktuelle Arbeitsbereich ' von Outlook festgelegt und stellt Methoden zur ' An- und Abmeldung in Outlook bereit. Dim MobjMF As MAPIFolder ' der MAPI-Folder legt den Ordner fest (z. B. Kontakte) Dim MobjIt As Items ' die Items sind die einzelnen Einträge Dim zaehler As Integer ' einfache Integervariable zur Füllung der Listboxen Dim AktuellerUserKontakte As String ' zur Speicherung des Usernamens - vom Profil abhängig Dim AktuellerUserMails As String ' zur Speicherung des Usernamens - vom Profil abhängig Private Sub Command1_Click() Call kontakte_lesen End Sub Private Sub Command2_Click() Call mailtopics_lesen End Sub Private Sub Command3_Click() Call Maillist_Click End Sub Private Sub form_load() MsgBox "Willkommen im Outlook-Reader 1.0", , _ "Outlook-Reader 1.0" Command3.Visible = False ' Button zum Anzeigen der einzelnen Mail deaktivieren End Sub Private Sub form_Unload(Cancel As Integer) ' alle Objekte abschließen Set KobjOutlook = Nothing Set KobjNS = Nothing Set KobjIt = Nothing Set KobjMF = Nothing Set MobjOutlook = Nothing Set MobjNS = Nothing Set MobjIt = Nothing Set MobjMF = Nothing End Sub Sub kontakte_lesen() MousePointer = vbHourglass ' das erste Auslesen kann einen ganzen Moment dauern Set KobjOutlook = New Outlook.Application ' Outlook initialisieren Set KobjNS = KobjOutlook.GetNamespace("MAPI") ' Namespace initialisieren AktuellerUserKontakte = KobjNS.CurrentUser Label3 = "aktueller User: " & AktuellerUserKontakte Set KobjMF = KobjNS.GetDefaultFolder(olFolderContacts) ' Ordner (Folder) setzen / in diesem Fall Contacts Set KobjIt = KobjMF.Items ' die Items initialisieren KobjIt.Sort "[Lastname]", False ' Einträge nach dem Nachnamen sortieren lassen ' Alle Items in die Listbox schreiben (Zuname & Vorname) For zaehler = 1 To KobjIt.Count Kontaktlist.AddItem KobjIt(zaehler).LastName & ", " _ & KobjIt(zaehler).FirstName ' über das Objekt KobjIt(Itemnummer) ' kann das einzelne Objekt aufgerufen werden; ' die jeweilige Property kann mit .Property (z. B. ' .Lastname) aufgerufen werden Next zaehler MousePointer = vbDefault ' Mousepointer wieder "normal" einstellen End Sub Private Sub mailtopics_lesen() MousePointer = vbHourglass ' das erste Auslesen kann einen ganzen Moment dauern Set MobjOutlook = New Outlook.Application ' Outlook initialisieren Set MobjNS = MobjOutlook.GetNamespace("MAPI") ' Namespace initialisieren Set MobjMF = MobjNS.GetDefaultFolder(olFolderInbox) ' Ordner (Folder) setzen / in diesem Fall Contacts AktuellerUserMails = MobjNS.CurrentUser Label4 = "aktueller User: " & AktuellerUserMails Set MobjIt = MobjMF.Items ' die Items initialisieren MobjIt.Sort "[ReceivedTime]", True ' Einträge nach dem Eingangsdatum und der -zeit ' sortieren lassen; True bedeutet absteigend ' Alle Items in die Listbox schreiben (Betreffzeile) For zaehler = 1 To MobjIt.Count Maillist.AddItem MobjIt(zaehler).Subject ' über das Objekt MobjIt(Itemnummer) ' kann das einzelne Objekt aufgerufen werden; ' die jeweilige Property kann mit .Property (z. B. ' .Subject) aufgerufen werden Next zaehler If Maillist.ListCount > 0 Then Command3.Visible = True ' wenn eMails vorhanden sind, wird der "Anzeigen"- ' Button aktiviert MousePointer = vbDefault ' Mousepointer wieder "normal" einstellen End Sub Private Sub Maillist_Click() If Maillist.ListIndex >= 0 Then ' wenn ein Item aus der Listbox gewählt ist, dann ' wird die einzelne Mail angezeigt Form2.Label6 = MobjIt(Form1.Maillist.ListIndex + _ 1).CreationTime ' das Erstellungsdatum und die -Zeit wird dargestellt Form2.Text1 = MobjIt(Form1.Maillist.ListIndex + 1).SenderName ' der Name des Absenders wird eingefügt Form2.Text2 = MobjIt(Form1.Maillist.ListIndex + 1).CC ' die weiteren Empfänger (CC) werden eingefügt Form2.Text3 = MobjIt(Form1.Maillist.ListIndex + 1).Subject ' das Subject (der Betreff) wird eingefügt Form2.Text4 = MobjIt(Form1.Maillist.ListIndex + 1).Body ' der Mailinhalt wird eingefügt If MobjIt(Form1.Maillist.ListIndex + 1).Attachments.Count > 0 Then ' es wird auf Attachments geprüft Form2.Text5 = "" For zaehler = 1 To MobjIt(Form1.Maillist.ListIndex + _ 1).Attachments.Count Form2.Text5 = Form2.Text5 + "<" + _ MobjIt(Form1.Maillist.ListIndex + _ 1).Attachments.Item(zaehler) + ">" ' die Namen der Attachments werden ' eingefügt Next zaehler Else Form2.Text5 = "Keine Attachments" ' keine Attachment da End If Form2.Show End If End Sub
Listing 1
Projekt zum Download [4100 Bytes]
Eigenschaften (Properties)
Eigenschaften der einzelnen Items:
- Kontakte:
- CustomerID
- Title
- Firstname
- Middlename
- LastName
- Suffix
- FullName
- Jobtitle
- Categories
- Nickname
- Profession
- Gender
- BusinessAdressStreet
- BusinessAdressCity
- BusinessAdressState
- BusinessAdressPostalCode
- BusinessAdressCountry
- BusinessAdress
- HomeAdressStreet
- HomeAdressCity
- HomeAdressState
- HomeAdressPostalCode
- HomeAdressCountry
- HomeAdress
- BusinessTelephoneNumber
- BusinessFaxNumber
- HomeTelephoneNumber
- HomeFaxNumber
- EmailAddress1
- EmailAddress2
- MobileTelephoneNumber
- AutoTelephoneNumber
- ISDNNumber
- Mails
- SenderName
- CC
- Subject
- CreationsTime
- Attachments.Count
- Attachments.Item(Index)
Ihre Meinung
Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 19 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Pascal Mannherz am 30.08.2006 um 10:21
Hi,
ich würde gerne den Outlook-Kalender auslesen und wenn möglich auch Termine darin erstellen.
Ist dies genau so möglich?
Gibt es zum Kalender vielleicht auch eine Propertie Liste?
MfG Pascal
Kommentar von The_Akki am 02.07.2006 um 11:09
Ich habe Visual Studio 2003 installiert. Wenn ich das Projekt öffnen möchte erhalte ich die Fehlermeldung, dass die benötigte Library nicht enthalten ist. Ich habe das XP-eigene Outlook installiert.
Wie komme ich zu dieser Library? Ich habe schon danach gegoogelt aber nix gefunden. Kann mir jemand helfen?
Thx
Kommentar von Fabian am 19.06.2006 um 12:57
ich bekomme immer die meldung: Ein Programm versucht, auf Ihre gespeicherten E-mail-Adressen zuzugreifen. Möchten Sie dies zulassen. laut Microsft dibt es die möglichkeit eine vertrauenswürdige Interaktion anzuwenden um die zu umgehen. Weiß jemand wie ds in VB geht?
http://office.microsoft.com/de-de/assistance/ha011127891031.aspx
Kommentar von Petra Lücke am 12.05.2006 um 14:56
Guten Tag,
meine Frage lautet: Wie bezeichnet man das "Empfänger-Feld" in Outlook
Kommentar von noone am 21.01.2006 um 18:08
- danke -
war brauchbar
Kommentar von Olli am 21.12.2005 um 17:44
Scheint an Items zu liegen. Was ist Items ? So geht es jedenfalls (getestet):
Dim objOutlook As Outlook.Application
Dim objNameSpace As Namespace
Dim objMailordner As MAPIFolder
Dim objMail As MailItem
Set objOutlook = New Outlook.Application
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objMailordner = objNameSpace.GetDefaultFolder(olFolderInbox)
For Each objMail In objMailordner.Items
' ....
Kommentar von Ronald am 20.12.2005 um 10:20
@ Olli. DAs habe ich ja auch schon versucht:
Dim objOutlook As Outlook.Application
Dim objNameSpace As Namespace
Dim objMailordner As MAPIFolder
Dim objMail As Items
Set objOutlook = New Outlook.Application
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set objMailordner = objNameSpace.GetDefaultFolder(olFolderInbox)
Set objMail = objMailordner.Items
For Each objEMail In objMail
Dann kommt aber immer der Fehler:
Ungültiger Prozeduraufruf oder ungültiges Argument.
Weiß nicht warum. Es muss aber an diesen Zeilen liegen. Wenn ich es mit
Set objGAINMailordner = objMailordner.Folders("Test")
mache klappt es, ich komme nur nicht auf den Posteingang.
Kommentar von Olli am 19.12.2005 um 18:29
Hallo, das geht (wie im Beispiel) via .GetDefaultFolder(olFolderInbox) und dann durchackern, wie gehabt.
PS: Thema SenderName - Lt. Microsoft haben die die Absenderadresse einfach vergessen. Erst mit OL 11 (2003) gibt es diese Property.
Kommentar von Ronald am 19.12.2005 um 15:40
Hallo. Super tut. Wie kann ich aber direkt auf den Ordner "Posteingang" zugreifen?
Kommentar von Olli am 22.09.2005 um 18:15
Ich hätte auch noch ein Problem, auf dem ich schon einige Zeit herumkaue. Wie bekommt man zu dem SenderName eines MailItem die Adresse heraus ? SenderName ist der angezeigte Name und der findet sich nicht zwingend in den Kontakten wieder, so dass man sich die Adresse raussuchen könnte. So etwas wie SenderAddress gibt es nicht. Da sein muss die Adresse aber, weil Outlook sie schliesslich anzeigen kann, wenn man doppelclickt.
Vielleicht weiss ja jemand was !? Wäre super, Outlook-Objekte schmecken fade.
Kommentar von Tiri lee am 01.07.2005 um 15:22
Hallo! Vielen Dank für die Hilfe!
ich habe noch eine frage:
wenn ich den Ordner festlege:
Set KobjMF = KobjNS.GetDefaultFolder(olFolderContacts)
besteht irgendwie die möglichkeit, einen unterordner des Kontakte-Ordners zu definieren??
Vielen Dank für eure Hilfe
Kommentar von Ilona am 22.03.2005 um 21:30
Super!
Ich hab da noch ein kleines Problem. Weiß jemand, wie man ein bestimmtes Mail-Item aus dem Inbox-Folder
löschen bzw. in einen anderen Folder verschieben kann?
Ich hoffe jemand kann mir da weiterhelfen.
Schon mal vielen Dank!
Kommentar von Thomas am 26.02.2005 um 19:36
Hallo,
ist echt ein gutes Tut!!!
Ich hab den Zugriff auf Outlook erfolgreich durchgeführt. Nun meine Frage:
Was muss ich machen, um alle Eigenschaften/Datenfelder der Kontakte wie z.B. (Lastname, Firstname,...) auszulesen?
Durch ausprobieren bin ich noch auf "CompanyName" gekommen.
Schon mal danke
Kommentar von Tammy am 26.01.2005 um 15:21
Danke :)
Kommentar von Malena am 14.09.2004 um 08:25
Toll !!!
Aber wie könnte ich genau eine ausgewählte E-Mail auslesen, ohne alle E-Mails durchzulaufen. Gibt es vielleicht eine Eigenschaft "Selected" oder so was?
Vielen Dank
Kommentar von roger casanova am 03.09.2004 um 11:22
Hat mir echt geholfen.
Kommentar von RedZac am 05.07.2004 um 20:12
Hallo,
erst mal vielen dank für dieses Super Tut, aber ich habe ein problem, ich bekomme es nicht hin die email addressen auszulsen. es kommt dann die fehler meldung Objekt unterstütze diese eigenschaft oder Methode nicht.
Vieleicht kann mir jemand helfen.
Es geht um die geänderte Zeile:
' Alle Items in die Listbox schreiben (Zuname & Vorname)
For zaehler = 1 To KobjIt.Count
Kontaktlist.AddItem KobjIt(zaehler).LastName & ", " _
& KobjIt(zaehler).EmailAddress1
' über das Objekt KobjIt(Itemnummer)
' kann das einzelne Objekt aufgerufen werden;
' die jeweilige Property kann mit .Property (z. B.
' .Lastname) aufgerufen werden
Next zaehler
Kommentar von David am 01.03.2004 um 14:52
Großes Lob an den Autor!
Hat mir wirklich geholfen!
Kommentar von Ane am 17.12.2003 um 17:08
Good HP