Die Community zu .NET und Classic VB.
Menü

Outlookdaten auslesen

 von 

Ü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.

Body auslesen - Krissel 05.09.14 12:04 12 Antworten

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