none
Access und Outlook (Inbox auslesen und Mail als msg speichern)

    Frage

  • hallo zusammen

    Ich kann ohne Probleme Mails aus Access heraus über Outlook versenden. Auch Termine in den Kalender eintragen funktioniert einwandfrei.

    Nun möchte ich eine im Posteingang eine markierte Mail (oder bei Bedarf auch alle)  "auslesen" und als msg-File speichern mit einem Dateinamen, welcher aus Access heraus generiert wird.

    Habe den folgeden Code gefunden, der bei mir in Access aber nicht funktioniert:

    Compile Error: Methode or Data not Found in der Zeile:

    Set Application.ActiveExplorer.CurrentFolder = myNameSpace.GetDefaultFolder(olFolderInbox)

    Es scheint, als könnte er mit ActiveExplorer nichts anfangen; obwohl der Verweis auf Outlook gesetzt ist.

    Public Sub ListSaveAs()  
    ' Definition der Variablen  
    Dim myOLApp
    Dim myInspector As Inspector
    Dim myItem As MailItem
    Dim myNameSpace As NameSpace
    Dim myfolder As MAPIFolder
    Dim myOlSel As Outlook.Selection
    Dim myOlExp As Outlook.Explorer
    Dim x As Integer 
    ' Mail-Eingangsordner festlegen  
    Set myNameSpace = Outlook.GetNamespace("MAPI")
    Set myfolder = myNameSpace.GetDefaultFolder(olFolderInbox)
    ' Markierter Eintrag  
    On Error Resume Next 
    ' Ansicht auf Eingangsordner  
    Set Application.ActiveExplorer.CurrentFolder = _
        myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myOlExp = Outlook.ActiveExplorer
    ' Markierte Mails zuweisen  
    Set myOlSel = myOlExp.Selection
    ' Alle markierten Mails durchlaufen  
    For x = 1 To myOlSel.Count
      Set myItem = myOlSel.Item(x)
      If myItem Is Nothing Then 
        MsgBox "Nichts markiert"
        Exit For 
      End If 
      On Error GoTo 0
        ' Exportieren  
        fkt_Export myItem
      Next x
    ' Aufräumen  
    Set myItem = Nothing 
    Set myOlExp = Nothing 
    Set myOlSel = Nothing 
    Set myfolder = Nothing 
    Set myNameSpace = Nothing 
    End Sub 
    

    Hat jemand vielleicht schon so was gemacht und kann helfen.

    Vielen Dank.

    Gruss René


    • Bearbeitet René Stutz Mittwoch, 17. Oktober 2012 15:12
    Sonntag, 14. Oktober 2012 10:37

Antworten

  • Hallo René

    Jetzt werden wir off-topic. Ich denke, Deine weitere Frage wäre in einem Outlook Forum besser aufgehoben und dort vermutlich sogar bereits beantwortet. Wenn Du es selber "erforschen" willst, dürfte das Explorer Objekt allenfalls weiterhelfen.

    Noch eine kleine Bitte: Wenn Du jeweils weitere Fragen hast, starte bitte einen neuen Thread. Das hilft späteren Besuchern, die Antworten auf deren Fragen ebenfalls zu finden.

    Gruss
    Henry

    "René Stutz" schrieb im Newsbeitrag news:ea60405e-1d9c-4ab3-b5b8-f542e1550fbd@communitybridge.codeplex.com...

    Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie
    mache ich das ? Auf der Basis von deinem Code?

    • Als Antwort markiert René Stutz Dienstag, 6. November 2012 08:28
    Dienstag, 6. November 2012 01:53
  • Hallo Henry

    Ich denke ich bin fast am Ziel, nur das mit dem Speichern geht noch nicht.

    Ich kann die Details der einzelnen Mails auslesen; wie z.B. SenderEMail usw. aber der Save Befehl

    läuft ins leere. Was mache ich noch falsch ?

    Public Function saveOlInboxToTemp()
      Dim appOL As Outlook.Application
      Dim mit As Outlook.MailItem
      Dim nsp As Outlook.NameSpace
      Dim fld As Outlook.MAPIFolder
      Dim J As Long
      Set appOL = New Outlook.Application
      Set nsp = appOL.GetNamespace("MAPI")
      Set fld = nsp.GetDefaultFolder(olFolderInbox)
      For J = 1 To fld.Items.Count
        On Error Resume Next
        Set mit = fld.Items(J)
        If Err = 0 Then
          'Debug.Print mit.Subject
          MsgBox mit.SenderEmailAddress
         
          mit.SaveAs Environ("c:\Temp") & "\msg(" & J & ").msg", olMSG
       
        Else
          Debug.Print "Item(" & J & ") Is not a Mailitem"
        End If
      Next
      Set mit = Nothing
      Set fld = Nothing
      Set appOL = Nothing
    End Function

    Gruss

    René

    • Als Antwort markiert René Stutz Montag, 5. November 2012 15:06
    Montag, 5. November 2012 13:17

Alle Antworten

  • .....habe bis zum heutigen Tag noch keine Lösung bekommen, resp. einen Hinweis, der mich

    dieser näher bringen würde.

    Wäre toll wenn sich das jemand mal anschauen würde.....

    Hat niemand eine Idee ?

    Besten Dank

    René

    Sonntag, 21. Oktober 2012 10:57
  • Hallo,

    René Stutz wrote:

    .....habe bis zum heutigen Tag noch keine Lösung bekommen, resp. einen
    Hinweis, der mich dieser näher bringen würde.

    Liegt wohl daran, dass man dazu das Outlook-Objektmodell gut kennen muss,
    was in einem Outlook-Forum eher der Fall sein duerfte.

    Wenn du dort nicht weiter kommst, melde dich nochmal.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 23. Oktober 2012 15:47
    Moderator
  • Hallo Peter

    Bin nun nochmals in die Tiefe des Netzes gestiegen....

    Es ist überall Code vorhanden, wie man das machen kann was ich mir vorstelle, nämlich aus Access

    heraus den Posteingang durchsehen und unter bestimmten Bedingungen das Mail als msg speichern.

    Bei mir ergibt sich nur das Problem, dass dieser Code wie oben beschrieben nicht läuft. Im Wesentlichen

    scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er bei mir nicht zu kennen/finden.

    Braucht es neben der Outlook.dll noch weitere Referenzen die ich einbinden müsste ?

    Wie schon erwähnt; ich kann Mails aus Access heraus versenden, Termine eintragen in Outlook usw., also ganz

    alles kann nicht fehlen bei mir, aber eben, etwas eben doch.

    Besten Dank und Gruss

    René

    Sonntag, 28. Oktober 2012 21:07
  • Hallo,

    René Stutz wrote:

    Es ist überall Code vorhanden, [...] Bei mir ergibt sich nur das Problem,
    dass dieser Code wie oben beschrieben nicht läuft. Im Wesentlichen
    scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er
    bei mir nicht zu kennen/finden.

    Zeig mal den Code.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Montag, 29. Oktober 2012 09:33
    Moderator
  • ....siehe oben, alles schon drin....

    Diesen Code habe ich in einem Access-Formular auf einen Button gelegt.

    Bin gespannt auf deine Tips...

    Besten Dank und Gruss

    René

    Montag, 29. Oktober 2012 20:10
  • Am 29.10.2012 schrieb René Stutz:

    ....siehe oben, alles schon drin....

    Wo ist der Code?

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Montag, 29. Oktober 2012 22:13
  • Hallo René
     
    "René Stutz" schrieb im Newsbeitrag
    news:fc53d740-0667-47fc-8a51-110e5d2bd900@communitybridge.codeplex.com...
    > Es ist überall Code vorhanden, wie man das machen kann was ich mir
    > vorstelle, nämlich aus Access
    > heraus den Posteingang durchsehen und unter bestimmten Bedingungen das
    > Mail als msg speichern.
    > Bei mir ergibt sich nur das Problem, dass dieser Code wie oben beschrieben
    > nicht läuft. Im Wesentlichen
    > scheitert das Ganze jeweils beim Outlook.ActiveExplorer; dies scheint er
    > bei mir nicht zu kennen/finden.
     
    Du musst die Makro Security sowohl von Access als auch von der OLE
    kontrollierten Anwendung (Outlook) auf Low setzen, sonst kann VBA nicht so
    richtig. Ist mir bei anderen Anwendungen (Excel, Word, PowerPoint) ebenfalls
    aufgefallen. Mal geht es problemlos, dann geht es wieder nicht und einzelne
    Objekte werden nicht gefunden. Abhilfe war bisher immer, die Makro Security
    bei diesen anderen Anwendungen zu deaktivieren. Evt. gibt es auch noch
    weniger invasive Eingriffe, aber ein Versuch wär's mal wert, oder?
     
    Gruss
    Henry
     
     
    Dienstag, 30. Oktober 2012 03:34
  • Hallo Winfried,

    Winfried Sonntag [MVP] wrote:

    Am 29.10.2012 schrieb René Stutz:

    ....siehe oben, alles schon drin....

    Wo ist der Code?

    Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
    lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
    nicht mit ;-), ergo:

    http://social.msdn.microsoft.com/Forums/de-DE/accessde/thread/1c09fcc4-82c3-4961-9477-6a633df8faa3

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 30. Oktober 2012 12:00
    Moderator
  • Hallo,

    René Stutz wrote:

    ....siehe oben, alles schon drin....

    Probier mal, die Zeilen mit dem ActiveExplorer wegzulassen und den Default Folder direkt zuzuweisen:

    'Set Application.ActiveExplorer.CurrentFolder = _
            myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myOlExp = myNameSpace.GetDefaultFolder(olFolderInbox)

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 30. Oktober 2012 12:04
    Moderator
  • Am 30.10.2012 schrieb Peter Doering [MVP]:
    Hallo Peter,

    Winfried Sonntag [MVP] wrote:

    Am 29.10.2012 schrieb René Stutz:

    ....siehe oben, alles schon drin....

    Wo ist der Code?

    Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
    lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
    nicht mit ;-), ergo:

    Aha, Danke für den Hinweis. Es gibt/gab eine zweite Bridge, die
    aktualisiert sogar die Postings im NUA wenn sie im Forum editiert
    wurden. Ich finde jetzt auf die Schnelle aber nicht den Download,
    poste ich später.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Dienstag, 30. Oktober 2012 18:37
  • Halllo Peter

    Vielen Dank für deinen Hinweis; ich werde das versuchen und melde mich dann wieder.

    Bin aber auch gespannt auf den Link von Winfried....

    Gruss

    René

    Dienstag, 30. Oktober 2012 22:19
  • Am 30.10.2012 schrieb Peter Doering [MVP]:

    Der wurde im OP nachtraeglich eingefuegt. Da wir beide ueber die Bridge
    lesen und diese bestehende Nachrichten nicht aktualisiert, kriegen wir das
    nicht mit ;-), ergo:

    http://communitybridge.kalmbach.eu/LocalDB.html ist das kleine Projekt
    von Jochen Kalmbach. Bei Gelegenheit werde ich das bestimmt mal
    testen. ;)

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Dienstag, 30. Oktober 2012 22:36
  • Sali Peter

    Komme leider damit nicht weiter....

    Es scheint, dass er schon bei den Dim Befehlen nicht findet was er möchte....

    Welche Verweise muss ich da noch einbinden? Habe Outlook eingebunden.

    Public Sub ListSaveAs() 
    ' Definition der Variablen 
    Dim myOLApp
    Dim myInspector As Inspector
    Dim myItem As MailItem
    Dim myNameSpace As NameSpace
    Dim myfolder As MAPIFolder
    Dim myOlSel As Outlook.Selection
    Dim myOlExp As Outlook.Explorer
    Dim x As Integer
    ' Mail-Eingangsordner festlegen 
    Set myNameSpace = Outlook.GetNamespace("MAPI")
    Set myfolder = myNameSpace.GetDefaultFolder(olFolderInbox)
    ' Markierter Eintrag 
    On Error Resume Next

    Gibt es wirklich nirgends ein kleines Projekt, dass aus Access heraus die Inbox anschaut und bei Bedarf

    ein Mail als msg speichert???

    Vielen Dank für alle Hinweise die Licht ins Dunkel bringen...

    Gruss

    René

    Donnerstag, 1. November 2012 12:03
  • Ich weiss nicht genau was Ihr da macht. Zuerst mal: Hast Du eine Referenz auf die Outlook Typelibrary gesetzt, sonst wird das nichts (ausser wenn Du Late Binding vorziehst, aber das ist dann der nächste Schritt). Dann müsste da die myOLApp als Outlook.Application definiert und instanziiert werden.

    Hier ein Beispiel (Outlook Referenz vorausgesetzt), das alle Mail Items, die in der Inbox drin sind, als msg speichert (ausnahmsweise mal getestet)

    Public Function saveOlInboxToTemp()
      Dim appOL As outlook.Application
      Dim mit As outlook.MailItem
      Dim nsp As outlook.NameSpace
      Dim fld As outlook.MAPIFolder
      Dim J As Long
      Set appOL = New outlook.Application
      Set nsp = appOL.GetNamespace("MAPI")
      Set fld = nsp.GetDefaultFolder(olFolderInbox)
      For J = 1 To fld.Items.Count
        On Error Resume Next
        Set mit = fld.Items(J)
        If Err = 0 Then
          Debug.Print mit.Subject
          mit.SaveAs Environ("TEMP") & "\msg(" & J & ").msg", olMSG
        Else
          Debug.Print "Item(" & J & ") Is not a Mailitem"
        End If
      Next
      Set mit = Nothing
      Set fld = Nothing
      Set appOL = Nothing
    End Function

    Und damit solltest Du eigentlich, sobald das mit instanziiert wurde, auch auf dessen Inhalt zugreifen können, um Deine speziellen Filter Kriterien anwenden zu können.

    HTH

    Henry

    Freitag, 2. November 2012 03:04
  • Hallo Henry

    Ich denke ich bin fast am Ziel, nur das mit dem Speichern geht noch nicht.

    Ich kann die Details der einzelnen Mails auslesen; wie z.B. SenderEMail usw. aber der Save Befehl

    läuft ins leere. Was mache ich noch falsch ?

    Public Function saveOlInboxToTemp()
      Dim appOL As Outlook.Application
      Dim mit As Outlook.MailItem
      Dim nsp As Outlook.NameSpace
      Dim fld As Outlook.MAPIFolder
      Dim J As Long
      Set appOL = New Outlook.Application
      Set nsp = appOL.GetNamespace("MAPI")
      Set fld = nsp.GetDefaultFolder(olFolderInbox)
      For J = 1 To fld.Items.Count
        On Error Resume Next
        Set mit = fld.Items(J)
        If Err = 0 Then
          'Debug.Print mit.Subject
          MsgBox mit.SenderEmailAddress
         
          mit.SaveAs Environ("c:\Temp") & "\msg(" & J & ").msg", olMSG
       
        Else
          Debug.Print "Item(" & J & ") Is not a Mailitem"
        End If
      Next
      Set mit = Nothing
      Set fld = Nothing
      Set appOL = Nothing
    End Function

    Gruss

    René

    • Als Antwort markiert René Stutz Montag, 5. November 2012 15:06
    Montag, 5. November 2012 13:17
  • Hallo Henry

    Jetzt habe ich es geschafft; er hatte wohl einwenig Probleme mit dem Dateinamen.

    Herzlichen Dank für deinen Hinweis, hat mich echt weiter gebracht !

    Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie mache ich das ? Auf der Basis von deinem Code?

    Danke und Gruss

    René

    Montag, 5. November 2012 13:47
  • ...sorry, anbei natürlich noch der Code so wie es funktioniert hat:

    Public Function saveOlInboxToTemp()
      Dim appOL As Outlook.Application
      Dim mit As Outlook.MailItem
      Dim nsp As Outlook.NameSpace
      Dim fld As Outlook.MAPIFolder
      Dim J As Long
      Set appOL = New Outlook.Application
      Set nsp = appOL.GetNamespace("MAPI")
      Set fld = nsp.GetDefaultFolder(olFolderInbox)
      For J = 1 To fld.Items.Count
        On Error Resume Next
        Set mit = fld.Items(J)
        If Err = 0 Then
          mit.SaveAs "c:\Temp\" & J & ".msg", olMSG
        Else
          MsgBox "Item(" & J & ") Is not a Mailitem"
        End If
      Next
      Set mit = Nothing
      Set fld = Nothing
      Set appOL = Nothing
    End Function

    Montag, 5. November 2012 13:59
  • Hallo René

    Jetzt werden wir off-topic. Ich denke, Deine weitere Frage wäre in einem Outlook Forum besser aufgehoben und dort vermutlich sogar bereits beantwortet. Wenn Du es selber "erforschen" willst, dürfte das Explorer Objekt allenfalls weiterhelfen.

    Noch eine kleine Bitte: Wenn Du jeweils weitere Fragen hast, starte bitte einen neuen Thread. Das hilft späteren Besuchern, die Antworten auf deren Fragen ebenfalls zu finden.

    Gruss
    Henry

    "René Stutz" schrieb im Newsbeitrag news:ea60405e-1d9c-4ab3-b5b8-f542e1550fbd@communitybridge.codeplex.com...

    Frage: kann ich auch abfragen, welche Mail gerade selektiert ist ? Wie
    mache ich das ? Auf der Basis von deinem Code?

    • Als Antwort markiert René Stutz Dienstag, 6. November 2012 08:28
    Dienstag, 6. November 2012 01:53
  • Sali Henry

    Mach ich natürlich; leicht festzustellen dass ich noch neu bin hier und der Durchblick noch etwas fehlt; aber was ich bis jetzt bekommen habe war super!

    Hoffe ich komme auch mal in das Stadium, dass ich auch helfen kann....

    Gruss

    René

    Dienstag, 6. November 2012 08:28