Zum Inhalt springen

Skript funktioniert nicht...


xucha

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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


Link zu diesem Kommentar
Auf anderen Seiten teilen


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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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