On Mon, 17 Sep 2001, Johannes Gruber wrote: *brrr* Der useless use of cat geht in mehrfacher Ausfertigung an... Erstens: tr kann nur mit einzelnen Zeichen umgehen! tr "FW:" "Re:" usw. machen also garantiert nicht das, was du willst. [von procmail aufgerufen]
# Erstelle eine eine Kopie des aktuellen Mails cat > ~/mails.tmp # Aus dem temp. Mailfile mails.tmp werden Absender, Betreff, ID, Datum und Nachricht gerausgefiltert from=`cat ~/mails.tmp | tr "'" "-" | formail -x From:`
from=`formail -x "From:" < ~/mails.tmp | tr "'" '-'` ^^^^^^^^^^^^^ Wozu?
subject=`cat ~/mails.tmp | tr "'" "-" | tr "FW:" "Re:" | tr "RE:" "Re:" | tr "Fw:" "Re:" | formail -x Subject:`
subject=`formail -x "Subject:" < ~/mails.tmp \ | sed 's/\([Ff][Ww]\|[Rr][Ee]\):/Re:/'
id=`cat ~/mails.tmp | tr "'" "-" | formail -x Message-ID:`
id=`formail -x "Message-ID:" < ~/mails.tmp | tr "'" '-'` ^^^^^^^^^^^^^ dito
date=`cat ~/mails.tmp | tr "'" "-" | formail -x Date:` body=`cat ~/mails.tmp | tr "'" "-" | formail -I ""`
s.o. Was sollen die tr "'" "-" fuer einen Sinn haben?
echo "Schreibe Datensätze in Datenbank...." echo $id $date $from $subject $body >> ~/mails.log echo -e "INSERT INTO mails (messageid, date, sender, subject, body) VALUES ('$id', '$date', '$from', '$subject', '$body')"\ | mysql --user=user --password=user susenews
Ein Perlscript waere hier eleganter... Ich mache sowas aehnliches...
Ich kann am Script keinen Fehler erkennen, auch weils bei manchen Mails funktioniert. Habe ich irgendeinen Parameter vergessen??
s.o. du solltest ein paar manpages waelzen oder gleich ein perlscript schreiben: ==== /tmp/mail2/db.pl ==== #!/usr/bin/perl -w $body = ""; $in_header = 1; while(<>) { if(/^$/) { $in_header = 0; $body .= $_; while(<>) { $body .= $_; } } elsif ($in_header) { if(/^From:(.*)$/) { $from = $1; } elsif(/^Subject:(.*)$/) { $subject = $1; } elsif(/^Message-[Ii][Dd]:(.*)$/) { $msg_id = $1; } elsif(/^Date:(.*)$/) { $date = $1; } } } ==== Natuerlich kann man die einzelnen Variablen noch mit dem komplette perl-Arsenal anpassen, z.B. $from =~ tr/'/-/; und dann natuerlich auch gleich aus perl heraus (mit DBI/DBD) in die DB schreiben: ==== ungetestet ==== use DBD::mysql; my $driver = "mysql"; my $database = "mails"; my $host = "localhost"; my $port = "3306"; my $user = "user"; my $pass = "geheim"; $dbh = DBI->connect( "DBI:$driver:database=$database;host=$host", $user, $pass, {RaiseError => 1} ) || die "Can't connect to Database $database"; $sth = $dbh->prepare("INSERT INTO mails (messageid, date, sender, subject, body) VALUES ('$id', '$date', '$from', '$subject', '$body')") || die $dbh->errstr; $sth->execute || die "$sth->errstr"; $sth->finish; $dbh->disconnect; ==== Und ja, due koenntest auch alle Mails von procmail in eine Datei schreiben lassen und diese dann komplett in einem Rutsch in die DB befoerdern, oder das ganze sogar via nem Socket machen, so dass die DB nur einmal geoeffnet werden muss... Saemtliche Klarheiten beseitigt? -dnh -- Also das mit der Milchstarsse und dem Kecksplaneten kolingt ja noch halbwegs plausiebel. Aber Nesquick Alee? Nenen! Kann nich sein. dann wäre es ja ein Schockomoinster und kein Krümelmonster. [Woko° in dag°]