Wir hatten in unserer Firma in letzter Zeit Probleme mit den Mails.
Einige Nachrichten wurden nicht weitergeleitet und wir wollten nun schauen, warum die Mails nicht beim Empfänger ankamen.
Aber durch das Logfile per Hand zu gehen ist echt eine Qual, ich wollte es nun versuchen mit Python zu parsen, da die Netzwerküberwachung, die ich mit Dango umgesetzt habe, ebenfalls auf Python basiert. Somit könnte man dieses Modul einfach in die Netzwerküberwachung einarbeiten.
Nun habe ich leider noch nie einen Parser geschrieben und versuche gerade in pyparsing die Grammatik auf die Beine zu stellen.
Hier mal ein Ausschnitt aus dem Logfile, es werden nur die Zeilen mit der message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de betrachtet. Da das Logfile über 25 MB groß ist, kann ich nur die relevanten Zeilen darstellen:
Code: Alles auswählen
Sep 18 04:15:22 mailrelay postfix/cleanup[12103]: 755387301: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:22 mailrelay spamd[1364]: spamd: processing message <200609180214.k8I2EuNo016264@mforward2.dtag.de> for nobody:65534
Sep 18 04:15:25 mailrelay spamd[1364]: spamd: result: Y 15 - BAYES_99,DATE_IN_PAST_03_06,DNS_FROM_RFC_ABUSE,DNS_FROM_RFC_DSN,DNS_FROM_RFC_POST,DNS_FROM_RFC_WHOIS,FORGED_MUA_OUTLOOK,SPF_SOFTFAIL scantime=3.1,size=8086,user=nobody,uid=65534,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=55277,mid=<200609180214.k8I2EuNo016264@mforward2.dtag.de>,bayes=1,autolearn=no
Sep 18 04:15:25 mailrelay postfix/cleanup[12074]: DA1431965E: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:26 mailrelay postfix/cleanup[13057]: EF90720AD: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:26 mailrelay postfix/smtp[10879]: EF90720AD: to=<SPAM-FOUND@OUR-MAILSERVER.mail.com>, relay=10.49.0.7[10.49.0.7], delay=1, status=sent (250 2.6.0 <200609180214.k8I2EuNo016264@mforward2.dtag.de> Queued mail for delivery)
- Mail kommt an
- Mail wird an Virenscanner (Trendmicro) geschickt
- Mail wird an Spamassassin geschickt
- Mail wird an Empfänger (wenn Nachricht "sauber") oder an unser Büro (wenn Nachricht "Spam" oder "Virus") geschickt
755387301
DA1431965E
EF90720AD
Filtere ich das Logfile erneut nach diesen Nummern, erhalte ich anscheinend alle Einträge zu entsprechender Mail:
Code: Alles auswählen
Sep 18 02:15:11 mailrelay postfix/smtpd[10841]: 755387301: client=unknown[194.25.242.123]
Sep 18 04:15:22 mailrelay postfix/cleanup[12103]: 755387301: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:22 mailrelay postfix/qmgr[11082]: 755387301: from=<sender@mail.net.mx>, size=8152, nrcpt=7 (queue active)
Sep 18 04:15:25 mailrelay postfix/pipe[11659]: 755387301: to=<receiver1@mail.com>, relay=procmail, delay=14, status=sent (filter)
Sep 18 04:15:25 mailrelay postfix/pipe[11659]: 755387301: to=<receiver2@mail.com>, relay=procmail, delay=14, status=sent (filter)
Sep 18 04:15:25 mailrelay postfix/pipe[11659]: 755387301: to=<receiver3@mail.com>, relay=procmail, delay=14, status=sent (filter)
Sep 18 04:15:25 mailrelay postfix/pipe[11659]: 755387301: to=<receiver4@mail.com>, relay=procmail, delay=14, status=sent (filter)
Sep 18 04:15:25 mailrelay postfix/qmgr[11082]: 755387301: removed
Code: Alles auswählen
Sep 18 04:15:25 mailrelay postfix/pickup[13175]: DA1431965E: uid=65534 from=<nobody>
Sep 18 04:15:25 mailrelay postfix/cleanup[12074]: DA1431965E: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:25 mailrelay postfix/qmgr[11082]: DA1431965E: from=<nobody@OUR-MAILSERVER.mail.com>, size=11074, nrcpt=1 (queue active)
Sep 18 04:15:26 mailrelay postfix/smtp[11703]: DA1431965E: to=<SPAM-FOUND@OUR-MAILSERVER.mail.com>, relay=localhost[127.0.0.1], delay=1, status=sent (250 Ok: queued as EF90720AD)
Sep 18 04:15:26 mailrelay postfix/qmgr[11082]: DA1431965E: removed
Code: Alles auswählen
Sep 18 04:15:25 mailrelay postfix/smtpd[11704]: EF90720AD: client=localhost[127.0.0.1]
Sep 18 04:15:26 mailrelay postfix/cleanup[13057]: EF90720AD: message-id=<200609180214.k8I2EuNo016264@mforward2.dtag.de>
Sep 18 04:15:26 mailrelay postfix/smtp[11703]: DA1431965E: to=<SPAM-FOUND@OUR-MAILSERVER.mail.com>, relay=localhost[127.0.0.1], delay=1, status=sent (250 Ok: queued as EF90720AD)
Sep 18 04:15:26 mailrelay postfix/qmgr[11082]: EF90720AD: from=<nobody@OUR-MAILSERVER.mail.com>, size=11263, nrcpt=1 (queue active)
Sep 18 04:15:26 mailrelay postfix/smtp[10879]: EF90720AD: to=<SPAM-FOUND@OUR-MAILSERVER.mail.com>, relay=10.49.0.7[10.49.0.7], delay=1, status=sent (250 2.6.0 <200609180214.k8I2EuNo016264@mforward2.dtag.de> Queued mail for delivery)
Sep 18 04:15:26 mailrelay postfix/qmgr[11082]: EF90720AD: removed
Bei im Moment knapp 14000 message-ids wird es doch ein rießiger Zeitaufwand, wenn man das Logfile mehr als einmal (im schlimmsten Falle 14000 mal) durchlaufen muss.
Am liebsten hätte ich zum Schluss eine XML, die folgendermaßen aussieht:
Ist das machbar? Oder kann pyparsing sowas nicht?<message id="200609180214.k8I2EuNo016264@mforward2.dtag.de">
<timestamp>Sep 18 04:15:26</timestamp>
<from>sender@mail.net.mx</from>
<to>receiver1@mail.com</to>
<to>receiver2@mail.com</to>
<to>receiver3@mail.com</to>
<to>receiver4@mail.com</to>
<queueID>EF90720AD</queueID>
<queueID>DA1431965E</queueID>
<queueID>755387301</queueID>
<spamd>
<score>15</score>
<filtered>yes</filtered>
<sendto>SPAM-FOUND@OUR-MAILSERVER.mail.com</sendto>
</spamd>
</message>
Ich weiss das die Funktion asXML("node") mir ein XML ausspucken würde und ich weiß auch wie ich die Tags setzen kann (grammar.setResultsName()), aber ich weiss nicht ob ich die Daten in einem Rutsch sammeln kann.
Jemand eine Idee?
Oder ist dafür pyparsing gar nicht gut?