Mail Delivery Subsystem herauslesen ?

  • Outlook

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mumpel.

    Mail Delivery Subsystem herauslesen ?

    Hallöchen zusammen,

    ich habe folgendes kleines Problem...
    Ich schreibe gerade an einem Programm der automatisch Emails in einen Explorer Ordner abspeichert, so weit so gut.
    Nun wenn aber eine E-Mail von dem Mail Delivery Subsystem (Empfangsbestätigung) dazwischen kommt, bricht er ab und macht nichts mehr bzw. ich kann noch nicht mal diese Mail Delivery Subsystem-Mail in einen Explorer Ordner abspeichern.
    (Manuell kann ich diese Mails abspeichern)

    Nun ist meine simple Frage, kann man irgendwie in VBA herauslesen welcher Email-Typ das ist ?

    Mit freundlichen Grüßen
    Number Cruncher :thumbsup:

    Update:
    Quellcode

    Visual Basic-Quellcode

    1. Dim myOlApp As Outlook.Application
    2. Dim myMail As Outlook.MailItem
    3. Dim mail As String
    4. Dim pfad As String
    5. Dim fs As Object
    6. myOlApp = CreateObject(“Outlook.Application“)
    7. myMail = myOlApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
    8. fs = CreateObject(“Scripting.FileSystemObject“)
    9. pfad = (My.Settings.Speichern & "\") 'Speicherpfad'
    10. For Each myMail In myOlApp.ActiveExplorer.Selection
    11. mail = " " 'Ersetzt alle Zeichen die nicht abgespeichert werden können
    12. mail = Replace(myMail.Subject, ": ", "_ ")
    13. mail = Replace(mail, "&", "_")
    14. mail = Replace(mail, "<", "_")
    15. mail = Replace(mail, ">", "_")
    16. mail = Replace(mail, "?", "_")
    17. mail = Replace(mail, "\", "_")
    18. mail = Replace(mail, "/", "_")
    19. mail = Replace(mail, "*", "_")
    20. mail = Replace(mail, "|", "_")
    21. myMail.SaveAs(pfad & mail & "_" & myMail.EntryID & ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG)
    22. Next
    23. End Sub


    Update 2:
    Lösung
    Alle MailItems durch Objekte ersetzt und eine Abfrage mit ReportItem durchgeführt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Number Cruncher“ ()

    Ich weiß es nicht zu 100%, bin aber sehr sicher, dass sich diese Mail in keiner Weise von anderen Mails unterscheidet — Mail ist Mail.

    Du könntest daher nur Empfänger und/oder Betreff auslesen, zur Not auch den Text, um zu erkennen, dass es sich um eine solche Mail handelt.

    Habe dazu das hier gefunden: vbadud.blogspot.de/2008/04/ext…ct-and-body-of-email.html
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Habe ich auch gedacht aber eine Empfangs/Sendebestätigung, allgemein alles was über dieses "Mail Delivery Subsystem" läuft unterscheidet sich irgendwie..

    Visual Basic-Quellcode

    1. Dim myOlApp As Outlook.Application
    2. Dim myMail As Outlook.MailItem
    3. Dim mail As String
    4. Dim pfad As String
    5. Dim fs As Object
    6. myOlApp = CreateObject(“Outlook.Application“)
    7. myMail = myOlApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
    8. fs = CreateObject(“Scripting.FileSystemObject“)
    9. pfad = (My.Settings.Speichern & "\") 'Speicherpfad'
    10. For Each myMail In myOlApp.ActiveExplorer.Selection
    11. mail = " " 'Ersetzt alle Zeichen die nicht abgespeichert werden können
    12. mail = Replace(myMail.Subject, ": ", "_ ")
    13. mail = Replace(mail, "&", "_")
    14. mail = Replace(mail, "<", "_")
    15. mail = Replace(mail, ">", "_")
    16. mail = Replace(mail, "?", "_")
    17. mail = Replace(mail, "\", "_")
    18. mail = Replace(mail, "/", "_")
    19. mail = Replace(mail, "*", "_")
    20. mail = Replace(mail, "|", "_")
    21. myMail.SaveAs(pfad & mail & "_" & myMail.EntryID & ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG)
    22. Next
    23. End Sub


    Das ist nun mein Quelltext für die Speicherung/Exportieren der Emails in einen Explorer Ordner.
    Er funktioniert auch wunderbar bis auf einmal eine Mail Delivery Subsystem-Mail dazwischenkommt und mein komplettes Programm abstützen lässt. (Also ich kann auch alle markieren und er schickt sie mir alle in den Ordner solang keine Mail Delivery Subsystem dazwischen liegt.)
    Ich weiß auch genau wo er abstürtzt, nämlich bei For Each myMail In myOlApp.ActiveExplorer.Selection.
    Das müsst aber dann ja auch heißen, dass es für ihn keine "normale" Mail ist.. also wieso geht das nicht ? ?(

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Number Cruncher“ ()

    Hallo!

    Versuch mal nur mit Outlook-Variablen zu arbeiten, nicht mit den Net-Typen.

    Microsoft.Office.Interop.Outlook.OlItemType.olMailItem ersetzen durch olMailItem
    Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG ersetzen durch olMsg

    Testen kann ich nicht da ich eine Empfangsbestätigung noch nie im Leben gesehen habe. Ich kenne nur Lesebestätigungen.

    Gruß, René
    Nur wenn ich das Mail-Item als Object deklariere. Definiere ich das Mail-Item als Outlook.MailItem dann kommt es zur Fehlermeldung ("Typen unverträglich"). Also definiere Dein Mail-Item mal als Object.

    Beispiel aus meinem Outlook-VBA. Es wird die markierte Email gespeichert.

    Visual Basic-Quellcode

    1. Sub testEr()
    2. Dim oReply As Outlook.MailItem
    3. Dim obj As Object
    4. Select Case True
    5. Case TypeOf Application.ActiveWindow Is Outlook.Inspector
    6. Set obj = Application.ActiveInspector.CurrentItem
    7. Case Else
    8. With Application.ActiveExplorer.Selection
    9. If .Count Then Set obj = .Item(1)
    10. End With
    11. If obj Is Nothing Then Exit Sub
    12. End Select
    13. obj.SaveAs "C:\Users\Rene\Desktop\Test.msg", olMsg
    14. End Sub

    Lieber René,

    danke für die Information das solche Mails ReportItems sind !
    Dies war mir nicht bewusst X/. Also ist Mail nicht gleich Mail, haha.

    Hat alles funktioniert, herzlichsten Dank nochmal. :thumbsup:

    Number Cruncher schrieb:


    (...) Dies war mir nicht bewusst (...)

    Das wissen die wenigsten. Es wissen auch die wenigsten dass die Lesbestätigung (ReadReceiptRequested) nicht das selbe ist wie die Empfangsbestätigung/Übermittlungsbestätigung (OriginatorDeliveryReportRequested). Letzteres hängt davon ab ob der Emailprovider bzw. Emailserver die Übermittlungsbestätigung unterstützt. Als normaler Anwender muss man solche Dinge auch nicht wissen. Das Wissen kommt nur zum Tragen wenn man es mal braucht. Aber dafür gibt es ja Foren wie dieses. ;)