• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst]Maildrop, Maildir, Absender-Adresse, Punkte u. sed

konqui

Hacker
Hallo zusammen,

meine Mails hole ich per -fetchmail- über -crontab- ab.

Als MDA benutze ich -Maildrop- wg. -Maildir-Verzeichnisstruktur-.

Gespeichert werden die Mails in meinem -$HOME/.Maildir- Verzeichnis in der Form: Konto-Empfänger.Archiv-Jahr-Monat.Absender

Soweit funktioniert auch alles - die Mails kommen in die Ordner, in die Sie sollen.

In -Maildrop- bekomme ich die Absender-Adresse mit:
tolower(getaddr($MATCH)) =~ /^.*/;
Ergibt -> abc.xyz@provider.de

Wegen der Maildir-Verzeichnisstruktur sind -die Punkte-, die in der Mail-Adresse vorkommen, mein Problem.

Mein Versuch, dies mit -sed- zu ändern, schlug bisher fehl.
In der Konsole funktioniert
echo "abc.xyz@provider.de"|sed '/[.]/ s//(dot)/g'
Ergibt -> abc(dot)xyz@provider(dot)de
hervorragend.
Innerhalb von .mailfilter habe ich folgendes in Variationen versucht:
tolower(getaddr($MATCH)) =~ /^.*/ | sed '/[.]/ s//(dot)/g';
Als Hinweis bekomme ich immer
.mailfilter(49): Operation on: abc.xyz@provider.de and sed/[.]/ s//(dot)/g - bitwise or, result is 0
Vielleicht hat jemand das schon mal realisiert und kann mir einen Tip geben?
 
A

Anonymous

Gast
konqui schrieb:
Innerhalb von .mailfilter habe ich folgendes in Variationen versucht:
tolower(getaddr($MATCH)) =~ /^.*/ | sed '/[.]/ s//(dot)/g';
Als Hinweis bekomme ich immer
.mailfilter(49): Operation on: abc.xyz@provider.de and sed/[.]/ s//(dot)/g - bitwise or, result is 0

Jetzt mal ohne in mich näher damit zu befassen, was du dort vorhast, kann so nicht funktionieren. Die Syntax die ich dort sehe sieht verdächtig nach sowas ähnlichen wie Perl aus. Und das was dort hinter dem "=~" ist ein Regulärer Ausdruck der wohl irgendwo dazu genutzt wird um irgend etwas auszuwählen, ob das jetzt die einzelnen Mails sind oder die Zeilen die innerhalb einer Mail auf eine Adresse untersucht werden sollen ist aus diesen paar Zeilen nicht klar (schätze ehr es sind hier die Zeilen definiert die untersucht werden sollen), aber " | " wird dort an dieser Stelle mit Sicherheit nicht als Pipe erkannt sondern als "bitweises Oder" und das "sed .........." dann folglich nicht als Bashbefehl sondern als ein Regulärer Ausdruck.

Das bestättigt dann auch die Fehlermeldung. Auf diese Art geht das dort nicht, Du kannst hier bei diesem Filterprogramm das auf Perl aufbaut oder sogar einer auf Perl oder einer anderern Scriptsprache beruhenden eigenständigen Konfigurations- bzw Programmiersprache darstellt, nicht einfach Bashbefehle irgendwo dazwischen schreiben.
Schon allein der Operator "=~" sollte dir an dieser Stelle zeigen, das ist nichts was irgendwie nach Bash aussieht.
Linke Seite ist die Operation und die rechte Seite die Pattern Spezifikation die dazu genommen werden soll.

robi
 

abgdf

Guru
Hmm, sieht nach einer besonderen Filter-Sprache aus:

http://www.courier-mta.org/maildropex.html

Wenn das Perl folgt (und es sieht so aus), probier' mal:
Code:
tolower(getaddr($MATCH)) =~ /^.*/;
$MATCH =~ s/\./\(dot\)/g;
 
OP
konqui

konqui

Hacker
Danke für Eure Antworten.
Habe mich heute nochmal durch die diversen Manpages von Maildrop gewühlt und habe eine Lösung gefunden
Code:
tolower(getaddr($MATCH)) =~ /^.*/;

MATCH = `echo $MATCH | sed '/[.]/ s//(dot)/g'`

Ergebnis -> vorname(dot)nachname@provider(dot)de
Somit kann ich den Thread als gelöst markieren.
 
Oben