xucha Geschrieben 7. Februar 2007 Geschrieben 7. Februar 2007 Hallo, ich versuche mich gerade an einem Skript, welches aber irgendwie nicht ausgeführt wird. Etwas zum Hintergrund, also ich habe Postfix am laufen und versuche mit altermime an alle ausgehenden Emails eine Signatur dran zu hängen. Mit einer Domäne funkt alles wunderbar. Da ich aber mehrere Domänen habe, soll bei jeder Domäne eine andere Signatur dran. so sieht das Skript dann aus: #!/bin/sh # Parameter ALTERMIME=/usr/local/bin/altermime ALTERMIME_DIR=/var/spool/altermime SENDMAIL=/usr/sbin/sendmail else_file=/etc/postfix/default_sig.txt else_htmlfile=/etc/postfix/default_sig_html.txt AAA_file=/etc/postfix/AAA_sig.txt AAA_htmlfile=/etc/postfix/AAA_sig_html.txt BBB_file=/etc/postfix/BBB_sig.txt BBB_htmlfile=/etc/postfix/BBB_sig_html.txt CCC_pl_file=/etc/postfix/CCC_pl_sig.txt CCC_pl_htmlfile=/etc/postfix/CCC_pl_sig_html.txt CCC_dk_file=/etc/postfix/CCC_dk_sig.txt CCC_dk_htmlfile=/etc/postfix/CCC_dk_sig_html.txt # Prozesssignale TEMPFAIL=75 UNAVAILABLE=69 # Wechsel ins altermime Verzeichnis cd $ALTERMIME_DIR || { echo $ALTERMIME_DIR does not exist; exit $TEMPFAIL; } # Remove wenn normalexit,sighup,sigint,sigquit,kill trap "rm -f in.$$" 0 1 2 3 15 # Anlegen Tempdatei cat >in.$$ || { echo Cannot write to $ALTERMIME_DIR; exit $TEMPFAIL; } if [ cat in.$$ | grep From: | grep -o AAA.de = "AAA.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$AAA_file \ --disclaimer-html=$AAA_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } elif [ cat in.$$ | grep From: | grep -o BBB.de = "BBB.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$BBB_file \ --disclaimer-html=$BBB_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } elif [ cat in.$$ | grep From: | grep -o CCC.pl = "CCC.pl" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$CCC_pl_file \ --disclaimer-html=$CCC_pl_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } elif [ cat in.$$ | grep From: | grep -o CCC.dk = "CCC.dk" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$CCC_dk_file \ --disclaimer-html=$CCC_dk_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } else $ALTERMIME --input=in.$$ \ --disclaimer=$else_file \ --disclaimer-html=$else_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } fi $SENDMAIL "$@" <in.$$ exit $? kann mir jemand sagen, was ich hier falsch gemacht habe? vielen Dank! lg xucha Zitieren
DevilDawn Geschrieben 7. Februar 2007 Geschrieben 7. Februar 2007 Hallo, ich versuche mich gerade an einem Skript, welches aber irgendwie nicht ausgeführt wird. Fehlermeldung wäre hilfreich. sh -x scriptname wirkt auch oft wunder Das cat > datei zum anlegen müsste das Script zum stehen bringen, da cat kein input gegeben wurde. Zum Anlegen von Files gibts touch. Zitieren
xkl Geschrieben 7. Februar 2007 Geschrieben 7. Februar 2007 Das cat > datei zum anlegen müsste das Script zum stehen bringen, da cat kein input gegeben wurde. Das Cat funktioniert, er legt das file mit dem mail inhalt an(wird von Postfix übergeben). Nur die If Bedingungen scheinen nicht so zu wollen wie sie sollen Syntaktische Fehler gibt es keine. Zitieren
Schlaubi Geschrieben 7. Februar 2007 Geschrieben 7. Februar 2007 @DevilDawn: cat ließt defaultmäßig von stdin. @xucha: Abgesehen davon, dass Dein Code alles andere als gut lesbar ist, ist er auch noch ein Mix aus Möglichkeiten If-Abfragen in der Bash zu realisieren. An Deinem Skript kann man noch so einiges "optimieren". Aber zu Anfangs, schreib bitte mal derartige if-Abfragen wie folgt um: Um Dich nicht komplett zu verwirren (weil wirklich einiges verbesserungswürdig und falsch ist), zeige ich Dir "nur" den nächsten Schritt, seh es als Schubs in die richtige Richtung an - vielleicht erkennst Du dann bereits selbst wo Deine Probleme liegen: alt: if [ cat in.$$ | grep From: | grep -o AAA.de = "AAA.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$AAA_file \ --disclaimer-html=$AAA_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } neu: if [ "$(cat in.$$ | grep From: | grep -o AAA.de)" = "AAA.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$AAA_file \ --disclaimer-html=$AAA_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } Auch so funktioniert dieses Konstrukt jedoch noch nicht, entweder Du nimmst "if, then, else" oder Du arbeitest mit && bzw. || - aber ich würde mich für eines von beiden entscheiden. Und noch ein kleiner Tipp - schonmal etwas von "useless use of cat" gehört? Nein? Dann wirds Zeit Desweiteren würde ich Dir grundlegende Bash Lektüre nahe legen. Zitieren
xucha Geschrieben 8. Februar 2007 Autor Geschrieben 8. Februar 2007 @DevilDawn: cat ließt defaultmäßig von stdin. @xucha: Abgesehen davon, dass Dein Code alles andere als gut lesbar ist, ist er auch noch ein Mix aus Möglichkeiten If-Abfragen in der Bash zu realisieren. An Deinem Skript kann man noch so einiges "optimieren". Vielen Dank, es funktioniert jetzt soweit, aber wie du gesagt hast, man muss das ganze noch etwas optimieren. Auch so funktioniert dieses Konstrukt jedoch noch nicht, entweder Du nimmst "if, then, else" oder Du arbeitest mit && bzw. || - aber ich würde mich für eines von beiden entscheiden. warum nicht? Die || stehen ja im then teil, deswegen müsste es theoretisch funktionieren. Und noch ein kleiner Tipp - schonmal etwas von "useless use of cat" gehört? Nein? Dann wirds Zeit kannst du mir einen anderen Befehl vorschlagen, der die selbe Funktion hat??? Ansonsten danke nochmal... Zitieren
tuxlux Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Hast Du an dem Script noch etwas gebastelt? Läuft das jetzt sauber und stabil? Sitze nämlich vor dem selben Problem und könnte Deine/Eure Hilfe brauchen. Mehrere Domains, mehrere verschiedene Disclaimer / Signaturen in Kombination mit spamassassin und Abwesenheitsnotizen (vacation). Problem1: Postfixkonfiguration der Filter für obige Anforderung Problem 2: Das altermime-Script (was kann man am hier geposteten Script noch optimieren)? Vielen Dank schon mal. Zitieren
xkl Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Hast Du an dem Script noch etwas gebastelt? Läuft das jetzt sauber und stabil? Sitze nämlich vor dem selben Problem und könnte Deine/Eure Hilfe brauchen. Mehrere Domains, mehrere verschiedene Disclaimer / Signaturen in Kombination mit spamassassin und Abwesenheitsnotizen (vacation). Problem1: Postfixkonfiguration der Filter für obige Anforderung Problem 2: Das altermime-Script (was kann man am hier geposteten Script noch optimieren)? Vielen Dank schon mal. Hallo, gleiche Firma wie Xucha. Habe die Sachen auf der Arbeit. Die kann ich dir morgen zuschicken Zitieren
tuxlux Geschrieben 20. Februar 2007 Geschrieben 20. Februar 2007 Hallo, gleiche Firma wie Xucha. Habe die Sachen auf der Arbeit. Die kann ich dir morgen zuschicken Das wäre super. Vielen Dank Zitieren
xkl Geschrieben 21. Februar 2007 Geschrieben 21. Februar 2007 Postfix mit Signaturen HowTo tar -xvzf altermime-0.3.7.tar.gz make make install useradd -r -c "Postfix Filter" -d /var/spool/filter filter groupadd -r filter mkdir /var/spool/filter chown filter.filter /var/spool/filter chmod 750 /var/spool/filter speichern disclaimer in /etc/postfix chgrp filter disclaimer chmod 750 disclaimer Erstellen der .txt mit 755 Rechten Anpassen der /etc/postfix/master.cf hier mit amavis(muss die mail wieder an den Postfix zurückgeben) smtp inet n - n - - smtpd -o content_filter=smtp-amavis:[127.0.0.1]:10024 127.0.0.1:10025 inet n - n - - smtpd -o content_filter=dfilt: smtp-amavisd unix - - n - 2 smtp dfilt unix - n n - - pipe flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} Disclaimer #!/bin/bash # Parameter ALTERMIME=/usr/local/bin/altermime ALTERMIME_DIR=/var/spool/altermime SENDMAIL=/usr/sbin/sendmail else_file=/etc/postfix/default_sig.txt else_htmlfile=/etc/postfix/default_sig_html.txt xxxx_file=/etc/postfix/xxxx_sig.txt xxxx_htmlfile=/etc/postfix/xxxx_sig_html.txt xxxx_file=/etc/postfix/xxxx_sig.txt xxxx_htmlfile=/etc/postfix/xxxx_sig_html.txt xxxx_pl_file=/etc/postfix/xxxx_pl_sig.txt xxxx_pl_htmlfile=/etc/postfix/xxxx_pl_sig_html.txt xxxx_dk_file=/etc/postfix/xxxx_dk_sig.txt xxxx_dk_htmlfile=/etc/postfix/xxxx_dk_sig_html.txt # Prozesssignale TEMPFAIL=75 UNAVAILABLE=69 # Wechsel ins altermime Verzeichnis cd $ALTERMIME_DIR || { echo $ALTERMIME_DIR does not exist; exit $TEMPFAIL; } # Remove wenn normalexit,sighup,sigint,sigquit,kill trap "rm -f in.$$" 0 1 2 3 15 # Anlegen Tempdatei cat >in.$$ || { echo Cannot write to $ALTERMIME_DIR; exit $TEMPFAIL; } if [ "$(cat in.$$ | grep -m 1 From: | grep -o xxxx.de)" = "xxxx.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$xxxx_file \ --disclaimer-html=$xxxx_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } echo "Signatur xxxx.de eingefügt" >> /var/log/messages elif [ "$(cat in.$$ | grep -m 1 From: | grep -o xxxx.de)" = "Xxxx.de" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$xxxx_file \ --disclaimer-html=$xxxx_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } echo "Signatur xxxx.de eingefügt" >> /var/log/messages elif [ "$(cat in.$$ | grep -m 1 From: | grep -o xxxx.pl)" = "xxxx.pl" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$xxxx_pl_file \ --disclaimer-html=$xxxx_pl_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } echo "Signatur xxxx.pl eingefügt" >> /var/log/messages elif [ "$(cat in.$$ | grep -m 1 From: | grep -o xxxx.dk)" = "xxxx.dk" ];then $ALTERMIME --input=in.$$ \ --disclaimer=$xxxx_dk_file \ --disclaimer-html=$xxxx_dk_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } echo "Signatur xxxx.dk eingefügt" >> /var/log/messages else $ALTERMIME --input=in.$$ \ --disclaimer=$else_file \ --disclaimer-html=$else_htmlfile \ || { echo Message content rejected; exit $UNAVAILABLE; } echo "Signatur Else eingefügt" >> /var/log/messages fi $SENDMAIL "$@" <in.$$ exit $? Zitieren
tuxlux Geschrieben 22. Februar 2007 Geschrieben 22. Februar 2007 Was haltet ihr von folgendem Konstrukt: statt bspw. [ "$(cat in.$$ | grep -m 1 From: | grep -o xxxx.de)" = "xxxx.de" ] entsprechend bei jedem if-Zweig folgendes: [ "$(grep -im1 'from:' in.$$ | tr A-Z a-z | grep -o xxxx.de)" = "xxxx.de" ] Zitieren
xkl Geschrieben 22. Februar 2007 Geschrieben 22. Februar 2007 [ "$(grep -im1 'from:' in.$$ | grep -o xxxx.de)" = "xxxx.de" ] müsste auch ohne Probleme laufen oder Zitieren
tuxlux Geschrieben 23. Februar 2007 Geschrieben 23. Februar 2007 [ "$(grep -im1 'from:' in.$$ | grep -o xxxx.de)" = "xxxx.de" ] müsste auch ohne Probleme laufen oder --- Solange im From-Teil des Headers die E-Mail-Adresse komplett aus Kleinbuchstaben besteht ja. Leider werden oftmals auch in E-Mail-Adressen Grossbuchstaben (Bsp.: Info@Firma.de) verwendet. Deshalb der "tr A-Z a-z" Eintrag. Zitieren
tuxlux Geschrieben 5. März 2007 Geschrieben 5. März 2007 Wir haben hier mit altermime noch ein kleines Problem: bei html-mails wird der disclaimer (eingebunden mit --disclaimer-html) zwar angehängt, enthält aber an uns nicht nachvollziehbaren Stellen ein Gleichheitszeichen, gefolgt von einem Leerzeichen. Ebenso ist der angehängte disclaimer in zwei Gleichheitszeichen eingebettet. So sieht es in etwa aus: = Mi= ster Beispiel Exa= mple-Street 123 Mülldarstellung 12345 City = So soll es aussehen: Mister Beispiel Example-Street 123 Mülldarstellung 12345 City An Umlauten oder Sonderzeichen kann es somit nicht liegen. Noch eine Frage: Wie sollte ein html-disclaimer formatiert sein? Reicht ein Mister Beispiel<br> Example-Street 123<br> Mülldarstellung<br> 12345 City oder sollte die Datei ein komplettes html-Grundgerüst enthalten? Vielen Dank für Eure Antworten. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.