abenteur
Goto Top

Outlook E-Mails auslesen und die in einem SQL Datenbank speichern

Hallo Zusammen,

ich versuche die o.g. Problem zu lösen, ich komme aber nicht klar.
Es soll die E-Mails überprüfen, Betreff, Absender und Datum auf einen Tabelle speichern.
Danach alle E-Mails überprüfen und zusammenzählen, bzw. anzeigen die PDF Dateien von den ungelesenen E-Mails.

Option Compare Database
Option Explicit

Sub TestAccessDB_Outlook()

    Dim oA As New Outlook.Application
    Dim o_NS As Outlook.NameSpace
    Dim oFs As Outlook.Folders
    Dim oFolder As Outlook.MAPIFolder
    Dim Inbox As Outlook.MAPIFolder
    Dim Drafts As Outlook.MAPIFolder
    Dim Archive As Outlook.MAPIFolder
    Dim MailFolder As Outlook.MAPIFolder
    Dim AdobeFolder As Outlook.MAPIFolder
    Dim MailItem As Outlook.MailItem
    Dim oItem As Outlook.MailItem
    Dim i As Long
    Dim intAttachement As Integer
    Dim intCounter As Integer
    Dim intItem As Integer
    Dim strMailbox As String
    Dim strInbox As String
    Dim strDrafts As String
    Dim strArchive As String
    Dim strDatabase As String
    Dim strAttachementType As String
    Dim Anzahl As Integer
    Dim EmailCount As Integer
    Dim db As Database
    Dim rs As Recordset
    Dim strSQL As String
    
    
    
    ' Datenbankverbindung herstellen  
    strDatabase = "C:\Users\username\Documents\Uebung.accdb"  
    Set db = CurrentDb
    
    ' Datensatz aus Tabelle öffnen  
    strSQL = "Select * FROM tbl_Email_Log;"  
    Set rs = db.OpenRecordset(strSQL)
    
   
    rs.AddNew
    
    rs!Betreff = "Test2"  
    rs!Datum_gesendet = Now()
    'rs!Betreff = oItem.Subject  
    rs.Update
    rs.Close
        
    ' Outlookverbindung herstellen  
    Set o_NS = oA.GetNamespace("MAPI")  
    o_NS.Logon , , , False
    Set oFs = o_NS.Folders

    'Hier müssen noch die Werte aus der zu öffnenden Outlook Mailbox rein  
    strMailbox = "email@email.com"  
    strInbox = "Posteingang"  
    strArchive = ""  
 
    Set oFolder = oFs.Item(strMailbox)
    Set Inbox = oFolder.Folders(strInbox)
    Set AdobeFolder = Inbox.Folders("Adobe")  
    Set MailFolder = o_NS.GetDefaultFolder(olFolderOutbox)


    ' Alle Mails im Posteingang zählen  
    For intItem = Inbox.Items.Count To 1 Step -1
    EmailCount = Inbox.Items.Count
    
    
         ' Nur ungelesene Mails bearbeiten  
        If Inbox.Items(intItem).UnRead = True Then
         ' Feststellen, um welche Objekt-Klasse es sich handelt und nur Mails bearbeiten  
            If Inbox.Items(intItem).Class = olMail Then
                Set oItem = Inbox.Items(intItem)
                rs!Betreff = oItem.Subject
                rs!Datum_gesendet = oItem.SentOn
                     If Not oItem.Attachments.Count = 0 Then
                    For intAttachement = 1 To oItem.Attachments.Count
                       ' Nur Mails mit PDF-Anlagen bearbeiten  
                        strAttachementType = Right(oItem.Attachments.Item(intAttachement).FileName, 3)
                        If UCase(strAttachementType) = "PDF" Then  
                            Anzahl = Anzahl + 1
                          End If
                    Next
                 End If
            End If
         End If
    Next
' MsgBox "Email gefunden mit PDF " & Anzahl & " von Insgesamt " & EmailCount & " E-Mail"  
End Sub

Was mach ich hier falsch? Kann mir jemand helfen?

Content-Key: 370346

Url: https://administrator.de/contentid/370346

Printed on: April 26, 2024 at 14:04 o'clock

Member: emeriks
emeriks Apr 06, 2018 at 09:26:01 (UTC)
Goto Top
Hi,
sollen wir das jetzt alles auseinander nehmen?
Wie weit läuft es denn noch? Wo hängt es, kommt eine Fehler, klappt es nicht?
Hast Du den Code selbst geschrieben oder Dir aus Fragmenten zusammenkopiert?

'Datenbankverbindung herstellen
strDatabase = "C:\Users\username\Documents\Uebung.accdb"
Set db = CurrentDb
Das z.B. sieht sehr komisch aus.

E.
Member: abenteuR
abenteuR Apr 06, 2018 at 09:31:39 (UTC)
Goto Top
Hallo Emeriks,

danke für die schnelle Antwort.

Bin Anfänger, ich will es aber lernen, bzw. üben.

Fehler 3420 ist in der Zeile
rs!Betreff = oItem.Subject
.
Die meiste Fragmenten sind zusammenkopiert.

Warum ist das "Datenbankverbindung herstellen " komisch?
Member: emeriks
emeriks Apr 06, 2018 at 09:51:21 (UTC)
Goto Top
Warum ist das "Datenbankverbindung herstellen " komisch?
Ja ok. Wir sind im Access VBA und nicht im Outlook VBA, richtig? Ich bin von Outlook ausgegangen ...

Fehler 3420
Object is invalid or no longer set. (Error 3420)

Entweder rs oder oItem sind hier wohl Nothing.
bzw.
Ich sehe kein "rs.AddNew" bevor Du eine weiteres Item einliest. Du musst doch erstmal einen neuen Datensatz anfangen.
Und danach das rs.Update und rs.Close?
Member: abenteuR
abenteuR Apr 06, 2018 at 10:34:51 (UTC)
Goto Top
Ja, es ist Access.

rs.AddNew in der Zeile 45.

Den Fehler 3420 ist "Das Objekt ist ungültig, oder es ist nicht mehr festgelegt."
Es ist festgelegt, aber warum ungültig, checke ich nicht face-sad
Member: emeriks
emeriks Apr 06, 2018 at 10:39:05 (UTC)
Goto Top
rs.AddNew in der Zeile 45.
Ja, für den Testdatensatz danach. Das musst Du natürlich für jeden neuen Datensatz (nächste Mail) erneut ausführen.

Es ist festgelegt, aber warum ungültig, checke ich nicht
Mit dem "rs.Close" in 51 schließt Du diesen Datensatz.
Member: abenteuR
abenteuR Apr 06, 2018 at 12:00:28 (UTC)
Goto Top
Stimmt.

Jetzt ist die
rs.Close
am Ende und zeigt kein Fehler, speichert auch Daten in der Tabelle... nur nicht genau so wie ich das gerne möchte face-smile
Auf jeden Fall, ich bin ein schritt weiter. Vielen Dank dafür!
Member: emeriks
emeriks Apr 06, 2018 at 12:18:19 (UTC)
Goto Top
Na dann mach diese Frage zu.
Member: emeriks
emeriks Apr 06, 2018 updated at 14:07:27 (UTC)
Goto Top
keine Ursache!