Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Automatisch E-Mail Adresse aus Mail Delivery Error in Textdatei kopieren

Frage Entwicklung VB for Applications

Mitglied: d4shoerncheN

d4shoerncheN (Level 2) - Jetzt verbinden

01.08.2013, aktualisiert 02.08.2013, 3550 Aufrufe, 37 Kommentare, 2 Danke

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:

01.
This message was created automatically by mail delivery software. 
02.
 
03.
A message that you sent could not be delivered to one or more of its 
04.
recipients. This is a permanent error. The following address(es) failed: 
05.
 
06.
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
37 Antworten
Mitglied: colinardo
01.08.2013 um 11:39 Uhr
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
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 11:43 Uhr
Moin @colinardo,

in welchen Programm liegen die Mails vor ? Outlook ?
Ja. Ich verwende Outlook 2010.

Gruß
@d4shoerncheN
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 11:45 Uhr
Dann schreib mir mal in welchem Ordner die Mails alle liegen, dann schreib ich Dir ein Script zum extrahieren.
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 11:47 Uhr
Du bist meine Rettung

Zitat von colinardo:
Dann schreib mir mal in welchem Ordner die Mails alle liegen, dann schreib ich Dir ein Script zum extrahieren.

Die E-Mails laufen im Ordner "No-Reply" auf.

Gruß
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 11:52 Uhr
Im root des Stores oder ist das ein Unterordner von einem anderen Ordner ?
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 11:57 Uhr
Hallo,

bb37a8dba7e67a66ffa1bcec898778e7 - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 14:27 Uhr
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:
Set fldr = Application.Session.Stores.Item("hoernchen").GetRootFolder.Folders("No-Reply")
01.
Sub parseMails() 
02.
    Const FILEPATH = "D:\emails.txt" 
03.
     
04.
    Set myRegExp = CreateObject("vbscript.regexp") 
05.
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
06.
    Dim fldr As Folder 
07.
    Set fldr = Set fldr = Application.Session.Stores.Item("t.gerns@domain.tld").GetRootFolder.Folders("No-Reply") 
08.
    Set objTextFile = objFSO.CreateTextFile(FILEPATH, True) 
09.
    myRegExp.IgnoreCase = True 
10.
    myRegExp.pattern = "The following address\(es\) failed:\s+(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)" 
11.
     
12.
    For i = 1 To fldr.Items.Count 
13.
        If fldr.Items(i).Class = olMail Then 
14.
            strBody = fldr.Items(i).Body 
15.
            Set myMatches = myregexp.Execute(strBody) 
16.
            If myMatches.Count >= 1 Then 
17.
                For Each myMatch In myMatches 
18.
                    If myMatch.SubMatches.Count >= 1 Then 
19.
                        strEMail = myMatch.SubMatches(0) 
20.
                        objTextFile.WriteLine (strEMail) 
21.
                    End If 
22.
                Next 
23.
            End If 
24.
        End If 
25.
    Next 
26.
 
27.
    objTextFile.Close 
28.
    MsgBox "Verarbeitung abgeschlossen !" & vbNewLine & "Die Datei mit den extrahierten E-Mail-Adressen liegt hier: " & FILEPATH 
29.
    Set myRegExp = Nothing 
30.
    Set objFSO = Nothing 
31.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 12:32 Uhr
Hallo Uwe,

schon mal vielen Dank.

Ich besitze nur ein (Exchange-)Konto. Bei der Scriptausführung erhalte ich folgende Meldung:
d4852cac1868319d9d73d11f77973ffd - Klicke auf das Bild, um es zu vergrößern

Für mich nicht wirklich aussagekräftig. Für dich eventuell schon.

Gruß
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 12:40 Uhr
sorry mein Fehler habe gedacht der Ordner no-reply wäre ein Unterordner des Posteingangs .. habe es oben korrigiert...jetzt sollte es laufen
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 12:44 Uhr
Leider selbe Fehlermeldung.

Habe den Ordner nun mal unterhalb vom Posteingang verschoben und deinen alten Code genutzt. Nun bekomme ich Fehlermeldung "Zugriff verweigert".

Gruß
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 12:43 Uhr
wie heißt der Store also der Name des Rootknotens ?
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 12:45 Uhr
Die E-Mail Adresse von mir t.gerns@domain.tld
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 12:47 Uhr
OK habs oben eingetragen, musst die E-MailAdresse noch oben in Zeile 8 ändern
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 12:50 Uhr
Wir nähern uns. Zugriff verweigert verschwand, nachdem ich von C: auf D: gewechselt habe. Nun bekomme ich Laufzeitfehler 13 - Typen unverträglich.
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 12:57 Uhr
Sind in dem Ordner auch noch andere Typen von Objekten? habe noch eine Änderung dahingehend gemacht. Aber hier läuft es problemlos...
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 13:05 Uhr
Irgendwas tut er nun zumindest, momentan "Keine Rückmeldung" - sobald er Ergebnisse liefert, teile ich sie mit.
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 13:05 Uhr
Okay, Script selber funktioniert.

Allerdings bekomme ich folgende E-Mail in mehrfacher Ausführung nur zurück:

info@domain.tld

Wahrscheinlich wertet er momentan die E-Mails aus, an wen die Fehlermeldung ging und nicht an welchen Empfänger ursprünglich.

Danke vielmals.
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 13:11 Uhr
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.
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.
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 13:18 Uhr
Hallo,

Aber Duplikate lassen sich ja einfach via Excel ausfiltern ...
das ist richtig. Das Problem besteht nur darin das die Datei nur die E-Mail "info@domain.tld" beinhaltet und keine andere. E-Mail Adresse des Empfängers befindet sich wie oben beschrieben in Zeile 6 des Textes.

Hier mal der Auszug aus der E-Mail
2c39e23e2be8e2ef733b514abc94e725 - Klicke auf das Bild, um es zu vergrößern

Mit den Punkten habe ich versucht die, für mich ersichtlichen, Zeilen zu markieren. An Punkt 6 kommt die E-Mail Adresse.

Gruß
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 13:28 Uhr
Hallo,

habe das Script oben noch einmal neu reinkopiert, entsprechend geändert, Outlook neugestartet und ausgeführt.
Inhalt der emails.txt
01.
info@domain.tld 
02.
info@domain.tld 
03.
info@domain.tld 
04.
.... gekürzte Fassung
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 13:27 Uhr
bin noch dabei zu checken, etwas Geduld ...
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 13:32 Uhr
Okay, keine Eile

Was mich ein wenig irritiert ist, woher hat er die "info@domain.tld" ? Die Fehlermeldungen gehen an ein POP3-Postfach "no-reply@domain.tld". Dieses POP3-Postfach wird vom Exchange (über POPcon Pro) abgeholt und an meine E-Mail Adresse umgeleitet.

Die E-Mail Adresse "info@domain.tld" wird also eigentlich in keinster Weise berührt.

Gruß
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 13:38 Uhr
Das Problem liegt daran ob die Mails in HTML oder Plaintext verfasst sind , bin noch dabei das auszuloten
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 14:23 Uhr
OK nun noch mal probieren, ist oben entsprechend angepasst.
--edit-- Seite bitte neu laden hatte noch eine kleine Korrektur drin
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 14:27 Uhr
Besten Dank, es funktioniert.

Worauf muss ich achten, bei anderen Mail delivery failed Meldungen? Einige habe ich die nicht genau so aussehen wie die oben genannte. Diese habe ich vorübergehend in einen anderen Ordner verschoben.

Gruß
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 14:39 Uhr
solange die Mail PLAIN-TEXT ist und eine Zeile mit
The following address(es) failed:
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:
myRegExp.pattern = "The following address\(es\) failed:\s+(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)" 
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):
myRegExp.pattern = "(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
Der Rest vom Text kann dabei beliebig variieren.

Grüße Uwe
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013, aktualisiert um 14:39 Uhr
Hallo,

habe es mit
myRegExp.Pattern = "Fehler bei der Nachrichtenzustellung an folgende Empfänger oder Gruppen:[\s]+(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,3}\b)"
versucht. Die E-Mail ist wie folgt:
01.
Fehler bei der Nachrichtenzustellung an folgende Empfänger oder Gruppen: 
02.
 
03.
empfaenger@domain.tld 
04.
Kommunikationsfehler bei der Zustellung der Nachricht. Versuchen Sie, die Nachricht zu einem späteren Zeitpunkt erneut zu senden. Wenden Sie sich an den Helpdesk, falls das Problem weiterhin besteht.
Aber wie in deiner Aussage immer die erste E-Mail die auftaucht. Daher versuche ich es mal mit
myRegExp.pattern = "(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
EDIT
Das funktionierte leider nicht, Datei bleibt leer.
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 14:48 Uhr
dann ist noch ein mailto: vor der Mailadresse enthalten das du nicht siehst um einen Link zu erzeugen:
myRegExp.pattern = ":?([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b)"
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 14:49 Uhr
Leider auch nicht.

Aber gut, dass sind nur ca. 50 Adressen. Die mache ich per Hand, möchte dich nicht noch weiter damit nerven.

Vielen Dank noch einmal.
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 14:51 Uhr
lade die Seite mal neu, hatte einen kleinen Typo drin
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 14:52 Uhr
Leider immer noch nicht.
Bitte warten ..
Mitglied: colinardo
01.08.2013, aktualisiert um 14:59 Uhr
Scheiß Outlook das schreibt bei manchen E-Mail-Hyperlinks solch ein Konstrukt
HYPERLINK "mailto:infol@test.local"infol@test.local
dann nimm diese allgemeine Variante
myRegExp.pattern = "([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})"
feddich ...
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 15:01 Uhr
Ich trau mich schon gar nicht mehr, aber Datei ist immer noch leer.

Outlook wurde vor jedem Versuch neugestartet.
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 15:03 Uhr
MUSS aber, dann hast du das Script irgendwie verwurschtelt ...
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 15:06 Uhr
Das stellen wir gleich fest.

01.
Sub parseMails() 
02.
    Const FILEPATH = "D:\emails2.txt" 
03.
     
04.
    Set myRegExp = CreateObject("vbscript.regexp") 
05.
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
06.
    Dim fldr As Folder 
07.
    Set fldr = Application.Session.Stores.Item("t.gerns@domain.tld").GetRootFolder.Folders("No-Reply") 
08.
    Set objTextFile = objFSO.CreateTextFile(FILEPATH, True) 
09.
    myRegExp.IgnoreCase = True 
10.
    myRegExp.Pattern = "([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6})" 
11.
     
12.
    For i = 1 To fldr.Items.Count 
13.
        If fldr.Items(i).Class = olMail Then 
14.
            strBody = fldr.Items(i).Body 
15.
            Set myMatches = myRegExp.Execute(strBody) 
16.
            If myMatches.Count >= 1 Then 
17.
                For Each myMatch In myMatches 
18.
                    If myMatch.SubMatches.Count >= 1 Then 
19.
                        strEMail = myMatch.SubMatches(0) 
20.
                        objTextFile.WriteLine (strEMail) 
21.
                    End If 
22.
                Next 
23.
            End If 
24.
        End If 
25.
    Next 
26.
 
27.
    objTextFile.Close 
28.
    MsgBox "Verarbeitung abgeschlossen !" & vbNewLine & "Die Datei mit den extrahierten E-Mail-Adressen liegt hier: " & FILEPATH 
29.
    Set myRegExp = Nothing 
30.
    Set objFSO = Nothing 
31.
End Sub
Bitte warten ..
Mitglied: colinardo
01.08.2013 um 15:16 Uhr
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.
Bitte warten ..
Mitglied: d4shoerncheN
01.08.2013 um 15:19 Uhr
Hallo,

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.
das war es. Danach lief es einwandfrei.

Vielen Dank
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst VBA Outlook - Mail delivery system (5)

Frage von carolin.zelda zum Thema VB for Applications ...

Windows 10
E-Mail-Adresse bzw. Konto bei Windows 10 ändern (7)

Frage von Schwedenbitter zum Thema Windows 10 ...

E-Mail
gelöst Absender E-Mail Adresse ändern in Lotus Notes (Domino Server) (2)

Frage von Hendrik2586 zum Thema E-Mail ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...