VBA Tipp: E-Mails mit Attachments aus Notes auslesen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Auslesen und Anzeigen von Lotus Notes Mails via VBA, sowie Extrahieren von enthaltenen Attachments beliebiger Anzahl.

Lösung

Der folgende Code enthält alles, was benötigt wird um

  • Mails aus einer Lotus Notes Datenbank herauszulesen,
  • Attachments zu extrahieren,
  • sowie eine Mail innerhalb des Clients zu öffnen und anschließend direkt anzuzeigen.

Das Beispielprogramm vereint exemplarisch die Implementierung einer Reihe an typischen Abläufen um Lotus Notes in eigene Anwendungen einzubinden.

Die Platzhalter <Server> und <Mailfile> sind durch die der eigenen Umgebung entsprechende Werte zu ersetzen.

Public Function NotesEMailsAnzeigen() As Integer
    On Error Goto ErrBeh
    Dim intErgebnis as integer
    Dim objNotes As Object
    Dim LNdb As Object
    Dim LNView As Object
    Dim LNDoc As Object
    Dim LNItem As Object
    Dim strSubject As String
    Dim LNWorkspace As Object
    Dim LNAttachment As Variant
 
    intErgebnis = 0
 
    'Holen einer aktiven Notessession
    Set objNotes = GetObject("", "Notes.NotesSession")
    'Verweisen auf die gewünschte Datenbank
    Set LNdb = objNotes.GETDATABASE(<Server>, <Mailfile>)
 
    'Lotus Notes Workspace Objekterstellung zur Steuerung der GUI
    '(Hierdurch kann der geöffnete Notes Client ferngesteuert werden.)
    Set LNWorkspace = CreateObject("notes.notesuiworkspace")
    LNWorkspace.OpenDatabase <Server>, <Mailfile>
 
    If Not (LNdb Is Nothing) Then
        'Der Zugriff erfolgt auf die InBox
        Set LNView = LNdb.GETVIEW("$Inbox")
        If Not (LNView Is Nothing) Then
            'Aktualsieren des Views
            Call LNView.Refresh
 
            'Einlesen des ersten Mail-Dokuments
            Set LNDoc = LNView.GETFIRSTDOCUMENT
 
            Do While Not LNDoc Is Nothing
                'Öffnen des aktuellen Mailfiles in der GUI
 
                'Subject der Mail ermitteln
                Set LNItem = LNDoc.GETFIRSTITEM("Subject")
                Debug.Print LNItem.Text
 
                'Anzeigen der Mail im Client?
                Select Case MsgBox("Soll die Mail mit dem Subject: " _
                                 + vbNewLine + vbNewLine + LNItem.Text _
                                 + vbNewLine vbNewLine _
                                 + " angezeigt werden?", vbYesNo)
                Case vbYes
                    LNWorkspace.EDITDOCUMENT True, LNDoc, False, "", True, True
                End Select
 
                'Body (Mailinhalt) der Mail ermitteln
                Set LNItem = LNDoc.GETFIRSTITEM("Body")
                Debug.Print LNItem.Text
 
                'Prüfen ob Attachments innerhalb der Mail vorhanden sind
                If LNDoc.HasEmbedded Then
                    Debug.Print vbNewLine + "Attached Files:"
                    For Each LNAttachment In LNItem.EmbeddedObjects
                        Debug.Print LNAttachment.Name
 
                        'Extrahieren des Attachments?
                        Select Case MsgBox("Attachment: " & _
                                            LNAttachment.Name & _
                                           " nach C:\ extrahieren?", vbYesNo)
                        Case vbYes
                            'File nach C:\ extrahieren
                            LNAttachment.ExtractFile ("C:\" + LNAttachment.Name)
                        End Select
                    Next
                    Debug.Print vbNewLine
                End If
 
                'Ermitteln des nächsten Mail-Dokuments
                Set LNDoc = LNView.GETNEXTDOCUMENT(LNDoc)
            Loop
        End If
    End If
 
GoTo Ende
ErrBeh:
    Err.Clear
    intErgebnis = 1
Ende:
 
    Set objNotes = Nothing
    Set LNdb = Nothing
    Set LNView = Nothing
    Set LNItem = Nothing
    Set LNWorkspace = Nothing
    Set LNDoc = Nothing
 
    NotesEMailsAnzeigen = intErgebnis
 End Function