Automatisch E-Mail Adresse aus Mail Delivery Error in Textdatei kopieren
Guten Morgen liebe Kollegen,
wir betreiben seit kurzem ein Newslettersystem, nur leider wurden die Adresslisten nicht wirklich gepflegt. Nach unserer ersten Mailingaktion sind nun ca. 500 Mails zurück gekommen. Besteht irgendwie die Möglichkeit die E-Mails zu filtern und in eine Textdatei zu kopieren?
Der Text von der Mail Delivery Error sieht ja immer wie folgt aus:
Nun die Frage an unsere Programmierer hier, kann man ein Macro oder andere Scriptsprachen verwenden die nun daher gehen und die Mails durchsuchen und den Inhalt von Zeile 6 kopieren und in eine Textdatei der Reihe nach einfügen?
Eventuell wenn man vorher alle Mails abspeichert?
Würde ungern nun dabei gehen und mir alle 500 Mails anschauen und die E-Mail Adressen rauskopieren, damit unsere Adressliste auf dem neusten Stand ist. Alternativ könnte ich bei der nächsten Mailingaktion unseren Mailprovider anschreiben, ob er die Daten irgendwie aus den Serverlogfiles ziehen kann.
Gruß
@d4shoerncheN
wir betreiben seit kurzem ein Newslettersystem, nur leider wurden die Adresslisten nicht wirklich gepflegt. Nach unserer ersten Mailingaktion sind nun ca. 500 Mails zurück gekommen. Besteht irgendwie die Möglichkeit die E-Mails zu filtern und in eine Textdatei zu kopieren?
Der Text von der Mail Delivery Error sieht ja immer wie folgt aus:
This message was created automatically by mail delivery software.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
empfaenger@domain.tld
Nun die Frage an unsere Programmierer hier, kann man ein Macro oder andere Scriptsprachen verwenden die nun daher gehen und die Mails durchsuchen und den Inhalt von Zeile 6 kopieren und in eine Textdatei der Reihe nach einfügen?
Eventuell wenn man vorher alle Mails abspeichert?
Würde ungern nun dabei gehen und mir alle 500 Mails anschauen und die E-Mail Adressen rauskopieren, damit unsere Adressliste auf dem neusten Stand ist. Alternativ könnte ich bei der nächsten Mailingaktion unseren Mailprovider anschreiben, ob er die Daten irgendwie aus den Serverlogfiles ziehen kann.
Gruß
@d4shoerncheN
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213100
Url: https://administrator.de/forum/automatisch-e-mail-adresse-aus-mail-delivery-error-in-textdatei-kopieren-213100.html
Ausgedruckt am: 25.12.2024 um 01:12 Uhr
37 Kommentare
Neuester Kommentar
Hi @d4shoerncheN,
in welchen Programm liegen die Mails vor ? Outlook ?
Mit abspeichern und via VBS und RegEx parsen wäre auch kein Problem.
Grüße Uwe
in welchen Programm liegen die Mails vor ? Outlook ?
Mit abspeichern und via VBS und RegEx parsen wäre auch kein Problem.
Grüße Uwe
So,
in Outlook mit ALT-F11 den VBA-Editor öffnen und den Code in "ThisOutlookSession" einfügen. Den Pfad zur Ausgabedatei mit den E-Mailadressen kannst du in Zeile 2 noch an deine Bedürfnisse anpassen.
Wenn du mehrere Konten in Outlook hast könnte es sein das du Zeile 8 eventuell noch anpassen musst.
Wenn der Root-Knoten deines Stores z.B. hoernchen heißt, wäre die Zeile 8 so zu ändern:
Grüße Uwe
in Outlook mit ALT-F11 den VBA-Editor öffnen und den Code in "ThisOutlookSession" einfügen. Den Pfad zur Ausgabedatei mit den E-Mailadressen kannst du in Zeile 2 noch an deine Bedürfnisse anpassen.
Wenn du mehrere Konten in Outlook hast könnte es sein das du Zeile 8 eventuell noch anpassen musst.
Wenn der Root-Knoten deines Stores z.B. hoernchen heißt, wäre die Zeile 8 so zu ändern:
Set fldr = Application.Session.Stores.Item("hoernchen").GetRootFolder.Folders("No-Reply")
Sub parseMails()
Const FILEPATH = "D:\emails.txt"
Set myRegExp = CreateObject("vbscript.regexp")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim fldr As Folder
Set fldr = Application.Session.Stores.Item("t.gerns@domain.tld").GetRootFolder.Folders("No-Reply")
Set objTextFile = objFSO.CreateTextFile(FILEPATH, True)
myRegExp.IgnoreCase = True
myRegExp.pattern = "The following address\(es\) failed:\s+(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
For i = 1 To fldr.Items.Count
If fldr.Items(i).Class = olMail Then
strBody = fldr.Items(i).Body
Set myMatches = myregexp.Execute(strBody)
If myMatches.Count >= 1 Then
For Each myMatch In myMatches
If myMatch.SubMatches.Count >= 1 Then
strEMail = myMatch.SubMatches(0)
objTextFile.WriteLine (strEMail)
End If
Next
End If
End If
Next
objTextFile.Close
MsgBox "Verarbeitung abgeschlossen !" & vbNewLine & "Die Datei mit den extrahierten E-Mail-Adressen liegt hier: " & FILEPATH
Set myRegExp = Nothing
Set objFSO = Nothing
End Sub
Grüße Uwe
Zitat von @d4shoerncheN:
Wahrscheinlich wertet er momentan die E-Mails aus, an wen die Fehlermeldung ging und nicht an welchen Empfänger
ursprünglich.
nein er wertet die E-Mail an der Stelle aus, so aus wie du es oben geschrieben hattest.Wahrscheinlich wertet er momentan die E-Mails aus, an wen die Fehlermeldung ging und nicht an welchen Empfänger
ursprünglich.
Das Phänomen der mehrfachen Mails kommt durch irgendeinen Cache-Mechanismus von Outlook. Hier hilft es Outlook mal neu zu starten.
Aber Duplikate lassen sich ja einfach via Excel ausfiltern ...
-edit- habe die Scheifenmethode geändert, da bei "Foreach" doppeltes Verarbeiten von Mails vorgekommen ist.
solange die Mail PLAIN-TEXT ist und eine Zeile mit
gefolgt von beliebig vielen Leerzeilen oder Spaces, gefolgt von der E-Mail-Adresse
enthält sollte es diese auch erkennen.
die eigentliche Extrahierung findet in diesem RegEx-Pattern statt:
wenn die gewünschte E-Mail-Adresse die erste E-Mail-Adresse ist die in dem Text auftaucht ginge auch folgendes vereinfachte RegEx (dies geht auch bei HTML-Mails):
Der Rest vom Text kann dabei beliebig variieren.
Grüße Uwe
The following address(es) failed:
enthält sollte es diese auch erkennen.
die eigentliche Extrahierung findet in diesem RegEx-Pattern statt:
myRegExp.pattern = "The following address\(es\) failed:\s+(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
myRegExp.pattern = "(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
Grüße Uwe
Da stimmt eigentlich alles,
wir haben halt nicht die selben Mails zum testen, denn daran muss es liegen, entweder stimmt hier die Objektklasse der Mails nicht (olMail) oder sonst was komisches.
Du kannst testweise mal versuchen Zeile 13 und 24 aus dem Script zu entfernen, wenn es dann läuft haben die Objekte eine andere Klasse.
wir haben halt nicht die selben Mails zum testen, denn daran muss es liegen, entweder stimmt hier die Objektklasse der Mails nicht (olMail) oder sonst was komisches.
Du kannst testweise mal versuchen Zeile 13 und 24 aus dem Script zu entfernen, wenn es dann läuft haben die Objekte eine andere Klasse.