Zum Inhalt springen

Skript funktioniert nicht...


Empfohlene BeitrÀge

Geschrieben

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

Geschrieben
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.

Geschrieben

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.

Geschrieben

@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 :D

Desweiteren wĂŒrde ich Dir grundlegende Bash LektĂŒre nahe legen.

Geschrieben
@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 :D

kannst du mir einen anderen Befehl vorschlagen, der die selbe Funktion hat???

Ansonsten danke nochmal...

  • 2 Wochen spĂ€ter...
Geschrieben

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.

Geschrieben
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

Geschrieben

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 $?


Geschrieben

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" ]

Geschrieben

[ "$(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.

  • 2 Wochen spĂ€ter...
Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto fĂŒr unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die grĂ¶ĂŸte IT-Community
rund um Ausbildung, Job, Weiterbildung fĂŒr IT-FachkrĂ€fte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard fĂŒr Fachinformatiker und IT-FachkrĂ€fte

×
×
  • Neu erstellen...