Datumsvergleich bei einer EMail
Thomas
- programmiertechnik
Hallo zusammen!
Ich habe folgendes Problem:
Ich schicke mir selbst eine Mail zu in der das Datum steht, in der ich diese Mail abgeschickt habe. Das soll bewirken, dass ich das Datum aus dem Header und das Datum in der Mail miteinander vergleichen kann und so sehe, wie lange die Mail von meiner Kiste zum Server und zurück gebraucht habe.
Soweit ok. Hier so eine Mail (subject ist irgend eine random nummer, nicht beachten :) ):
Received: from mail.bla.com (unverified) by mail.bla.com
(Content Technologies SMTPRS 4.1.5) with SMTP id Td5b099fde9e@mail.bla.com for ich@mein-pc.de;
Tue, 6 May 2003 11:24:27 +0200
Date: Tue, 6 May 2003 11:24:27 +0200
Message-ID: Td5bfde9e@mail.bla.com
SUBJECT: 506
To: undisclosed-recipients:;
Tue May 6 11:24:04 GMT 2003
Wie schaffe ich es nun in einem kleinen Script auf meiner Unix Kiste das Datum im Body und das Datum im Header zu vergleichen und dann zu sagen "Wenn Mail länger als 5 Minuten brauchte dann sende mail an bla@bla.de"?
Hab schon überall geschaut, aber nur VBA Lösungen gefunden...
Vielen Dank!!
Gruß, Thomas
Halihallo Thomas
Ich schicke mir selbst eine Mail zu in der das Datum steht, in der ich diese Mail abgeschickt habe. Das soll bewirken, dass ich das Datum aus dem Header und das Datum in der Mail miteinander vergleichen kann und so sehe, wie lange die Mail von meiner Kiste zum Server und zurück gebraucht habe.
Wie soll das gehen, wird die Mail gebounced? - Oder hast du dort ein Programm laufen,
welches dir die Mail gleich retourniert? - Wenn ja, das braucht auch Zeit, besonders,
wenn das Programm nur jede Minute aktiv wird (über cron z. B.).
Soweit ok.
Das möchte ich schonmal etwas bezweifeln.
Tue May 6 11:24:04 GMT 2003
Extrahiere die relevanten Daten.
Wie schaffe ich es nun in einem kleinen Script auf meiner Unix Kiste das Datum im Body und das Datum im Header zu vergleichen und dann zu sagen "Wenn Mail länger als 5 Minuten brauchte dann sende mail an bla@bla.de"?
Welche Scriptsprache soll's denn sein?
Hab schon überall geschaut, aber nur VBA Lösungen gefunden...
Was ist daran schlecht?
Viele Grüsse
Philipp
Hallo Philipp!!
Ich schicke mir selbst eine Mail zu in der das Datum steht, in der ich diese Mail abgeschickt habe. Das soll bewirken, dass ich das Datum aus dem Header und das Datum in der Mail miteinander vergleichen kann und so sehe, wie lange die Mail von meiner Kiste zum Server und zurück gebraucht habe.
Wie soll das gehen, wird die Mail gebounced? - Oder hast du dort ein Programm laufen,
welches dir die Mail gleich retourniert?
Viel einfacher! Ich schickte eine mail von Root an einen User auf meiner Kiste über den Mailserver. Klingt blöde hat aber seinen Sinn, aber das ist hier nicht relevant!
Welche Scriptsprache soll's denn sein?
Am besten Unix Shell oder C.
Hab schon überall geschaut, aber nur VBA Lösungen gefunden...
Was ist daran schlecht?
Ich mag VBA nicht, sorry.
Danke für deine Hilfe!
Gruß, Thomas
Halihallo Thomas
Welche Scriptsprache soll's denn sein?
Am besten Unix Shell oder C.
Unix Shell => Script
C => Programm
Nun, kurz vorab: mit Perl/PHP/Pyton und Konsorten liesse sich dies wesentlich
einfacher lösen. 4GL Languages sind dafür (eher) gedacht.
Schritte:
- Mail in das C-Programm einlesen (in einen dafür vorgesehenen Speicherbereich
natürlich).
- Mail-Body und -Header parsen
- Die zwei Daten extrahieren und in eine vergleichbare Form bringen
- Daten vergleichen und Ergebnis ausgeben.
Naja, mit C kannst du dies nicht einfach lösen, das braucht Zeit, einiges an Zeit
(zumindest ich würde die brauchen :-)). Shell-Script, hm?
Viele Grüsse
Philipp
Hallo Thomas!
Dank für deine Hilfe!! Ich bin gerade dabei ein C Programm zu schreiben (er liest derzeit auch schon das alles ein, aber mit dem vergleichen hapert es etwas...).
Mit php/perl etc kenne ich mich weniger aus... weißt du, ob es irgendwo ein beispiel script oder ähnliches gibt? Ich denke das würde mir die ganze C-Arbeit (wie du schon sagtest) sparen.
Danke nochmal!
Gruß, Thomas
Halihallo Thomas
Dank für deine Hilfe!! Ich bin gerade dabei ein C Programm zu schreiben (er liest derzeit auch schon das alles ein, aber mit dem vergleichen hapert es etwas...).
Was happert denn? ;-)
- Finde die Zeile mit dem Datum (vereinfacht: die erste Zeile, welcher _zwei_ \n
vorausgehen)
- Ignoriere die ersten vier Zeichen ('Tue ')
- Lese drei Zeichen in einen char[3] und transformiere ihn durch eine Funktion in einen
Monat als Zahl (Jan=>1, Feb=>2, ..., Dec=>12)
- ignoriere alle White-Spaces (' ', '\t', ...)
- hole alle Daten bis zum nächsten Whitespace ('11:24:04')
- lösche die nächsten Whitespaces
- lösche Zeichenkette bis und mit nächstem Whitespace ('GMT ' goes to hell)
- lese nächsten vier Zeichen ein ('2003') und speichere sie über atoi in "short year;"
so sollte das in etwa funktionieren ;)
Wie liest du eigentlich das Mail ein? - Über popen zu 'mail'? - Nur aus Interesse.
Mit php/perl etc kenne ich mich weniger aus... weißt du, ob es irgendwo ein beispiel script oder ähnliches gibt? Ich denke das würde mir die ganze C-Arbeit (wie du schon sagtest) sparen.
Nein, nach sowas habe ich noch nie gesucht (und wenn ich's bräuchte, würde ich es selber
programmieren).
Viele Grüsse
Philipp
Super!! Danke Philipp! Hat geklappt!!
Ne nicht mit popen. Ich habe einfach ein tail auf /var/spool/mail/... gemacht, die ausgabe in eine Datei verschoben und diese datei mit dem C Programm bearbeitet.. also hab ichs mir mehr als einfach gemacht ;-)
danke nochmal!
gruß, thomas