Zur Zeit geistern vermehrt Warnungen vor einer Abmahnwelle durch die Presse. Grund ist eine zum 01.01.2007 gültig gewordene Erweiterung des § 125a Abs. 1 Satz 1 des EHUG.
Hier wurde die bei Geschäftsbriefen ohnehin schon bestehende Pflicht zur Angabe der Handelregisterangaben auch auf eMails ausgeweitet.
Da man zwar alle Mitarbeiter auf diesen Umstand hinweisen kann, aber noch lange nicht sicher ist, dass dieser von allen gelesen (geschweige denn auch umgesetzt) wird, haben wir uns daher entschlossen, unserem MTA Postfix diese Aufgabe anzuvertrauen.
Dieser soll nun unter alle ausgehenden eMails des Hauses die gewünschten Angaben druntertackern.
Und da nicht nur wir das Problem haben dürften, hier eine kurze Beschreibung, wie wir das umgesetzt haben:
Grundlage für die Umsetzung war das Tool “alterMIME“, das u.a. ermöglicht, MIME-kodierte Dateien um Disclaimer zu erweiteren.
Wir haben uns im Großen und Ganzen bei der Installation und Konfiguration an die dort verlinkte Anleitung zur Konfiguration von alterMIME unter Postfix gehalten:
Nach dem Herunterladen und Kompilieren von altermime mit:
$ wget http://www.pldaniels.com/altermime/altermime-0.3.7.tar.gz
$ tar xvf altermime-0.3.7.tar.gz
$ cd altermime-0.3.7
$ make
(Und nein: es fehlt beim “tar” kein Parameter “z”
– Das Archiv heisst zwar so, ist aber nicht gezippt).
kommt das Programm nach /usr/local/bin und wird dort für jedermann ausführbar:
# cp altermime /usr/local/bin/
# chmod 755 /usr/local/bin/altermime
Wir lassen den Filter als User “postfix” ausführen, unter dem bei uns auch der MTA selbst läuft, halten uns aber in der Anleitung an das o.g. Vorbild und richten dafür einen extra Benutzer “filter” ein:
# useradd -r -c "Postfix Filter" -m -d /var/spool/filter filter
Und jetzt zum eigentlichen Script “/etc/postfix/disclaimer/filter”, das bei uns dafür sorgt, dass nur ausgehende Nachrichten mit dem Disclaimer versehen werden. Wir filtern das über die Absender-eMail-Adresse, die als erster Parameter an das Filter-Script übergeben wird:
#!/bin/bash
#
# Wo sind meine Sachen?
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
ALTERMIME=/usr/local/bin/altermime
#
SENDER_DOMAIN=meine-domain.de
COPYRIGHT_HEADER="Wichtiger Text"
#
# Fehlercodes:
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
#
# Aufraeumen nicht vergessen:
trap "rm -f in.$$" 0 1 2 3 15
#
# und los geht es
cd $INSPECT_DIR || { echo $INSPECT_DIR existiert nicht; exit $EX_TEMPFAIL; }
cat >in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }
#
# Domain aus uebergebener Absenderadresse filtern:
DOMAIN=${2##*@}
#
if [ "$DOMAIN" == "$SENDER_DOMAIN" ]; then
$ALTERMIME --input=in.$$ \
--disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
--disclaimer-html=/etc/postfix/disclaimer/disclaimer.txt \
--xheader="X-Copyrighted-Material: $COPYRIGHT_HEADER" || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
else
$ALTERMIME --input=in.$$ \
--xheader="X-Copyrighted-Material: $COPYRIGHT_HEADER" || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
#
$SENDMAIL "$@" <in.$$
exit $?
Das Ganze muss jetzt noch für den Filter-User ausführbar gemacht werden:
# chgrp filter /etc/postfix/disclaimer/filter
# chmod 750 /etc/postfix/disclaimer/filter
Der Text, der in die eMail eingefügt werden soll, muss jetzt als /etc/postfix/disclaimer/disclamaimer.txt angelegt werden.
Jetzt fehlt noch das Wichtigste: die Einbindung von alterMIME in die Postfix-Umgebung. Dies geschieht über die Erweiterung der /etc/postfix/master.cf.
Da bei uns der Mailserver nur eine IP-Adresse hat, und zusätzlich zum alterMIME auch noch Amavis mit der Mailfilterung beschäftigt ist (es wollen ja auch noch Spams und Viren bekämpft werden), sieht unsere master.cf in den angepassten Teilen jetzt so aus (hier unsere komplette master.cf.zip):
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
-o content_filter=smtp-amavis:[127.0.0.1]:10024
#
# [...hier noch das Standardzeug ...]
#
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=dfilt:
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} -- ${recipient}
Nach einem
# postfix reload
sollten die Hinweise nun in keinen ausgehenden elektronischen Nachrichten mehr fehlen, überprüfbar ist das im Mail.log über einen grep auf “dfilt”.
8. Februar 2007 um 18:36
Exakt das hab ich Montag auch gebastelt… Auch wenn mir diese Lösung absolut nicht gefällt, sie killt zuverlässig signierte Mails… Aber sie ist mir lieber als 20mal Outlook hinterherzurennen.
16. Februar 2007 um 11:26
Hallo,
danke für dieses sehr nützliche Skript, es ist fast unveränderbar zu übernehmen, aber achtung ein paar kleine Tippgfehler haben sich im filter-script eingeschlichen in form von leerzeichen wo keine hingehören..
An ein einer Steller beim Disclaimer haben wir noch ein problem was wohl aber mehr html ist. Die Text Mails gehen gut, wenn aber html Disclaimer angehängt werden so kommen diese dann mit teilweise umbrüchen an wo nie welche gesetzt wurde, so stehen dann im Quelltext der angekommenen Mail Umbrüche die nicht im Disclaimerquelltext sind, daher sind dann mitunter auch leerzeichen im Disclaimer der ankommenden mail. Wäre für tipps sehr dankbar. j.reichel@asklepios.com
16. Februar 2007 um 11:43
@Joerg: eigentlich sollte das Script auch unverändert laufen, ich habe es direkt vom Server in den Beitrag einkopiert. Ansonten: könntest Du mir die Tippfehler kurz mitteilen, dann könnte ich diese im Beitrag korrigieren? Tia.
Du kannst für HTML-Mails ja auch einen eigenen Disclaimer speichern und altermime über den Parameter “-disclaimer-html” mit auf den Weg geben, dann sollte das Problem der Vergangenheit angehören.
Gruß
Stefan
19. Februar 2007 um 14:09
Hallo,
das Leerzeichen ist in der Zeile “$SENDMAIL “$@”
19. Februar 2007 um 14:10
seltsam. mein restlicher Kommentar ist weg? dann nochmal.
in der master.cf ist auch ein Fehler. es muss heissen:
flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f${sender} — ${recipient}
19. Februar 2007 um 14:15
achja. ich würd den Pfad zum altermime in eine Variable stecken. der installiert sich standardmässig in /usr/local/bin/altermime
achja. und für alle die mehr als eine Domain haben kann man das über “if [ "$DOMAIN" == "$SENDER_DOMAIN" -o $DOMAIN" == "$NOCHEINE_SENDER_DOMAIN"]; then” lösen ($NOCHEINE_SENDER_DOMAIN muss natürlich oben definiert sein)
Gruss
Bernhard
20. Februar 2007 um 00:39
Hallo!
Ich habe mal das erweiterte Script von Bernhard online gestellt. Es ist auf 3 Domains erweitert und hoffentlich fehlerfrei
http://www.mfsnet.org/linux/postfix-disclaimer/filter.zip
Gruss
Franky
20. Februar 2007 um 10:32
Ups – da hatte ich meine Ichbastelnochdaranrum-Konfigurationen für die Erstellung des Posts benutzt *hüstel*.
Ich habe den Beitrag berichtigt und auch Altermime nach Bernhards Tipp in eine Variable geschoben.
Ich hoffe, so ist es jetzt korrekt …
Gruß
Stefan
21. Februar 2007 um 14:33
Sehr schöne Anleitung!
Wenn man sowieso AMAVIS verwendet, dann kann man auch gleich die %local_domains verwenden:
DOMAINLIST=/etc/amavis/local_domains
DOMAIN=${1##*@}
CHECK=” `cat ${DOMAINLIST} | tr ‘\n’ ‘ ‘`”
if [ "${CHECK}" != "${CHECK/ ${DOMAIN}/}" ] ; then
## footer hinzufügen
fi
Außerdem war ich nicht in der Lage die Parameter gleich an sendmail durchzureichen.
Mein master.cf ruft das Filterscript deshalb mit
…/filter ${sender} ${receiver}
auf.
Die Zeile im Script lautet dann:
$SENDMAIL -f $1 — $2
22. Februar 2007 um 12:37
Hallo, danke für die rege diskusion, wie gesagt bei uns läuft es nun auch nur eins ist aufgefallen wenn man in einer eigenen Signatur im Outlook ein bmp logo hat dann hängt altermime nur den Textdisclaimer an und nicht die html version. Sprich wenn der empfänger nicht auf plaintext sein outlook stellt sieht er den disclaimer nicht. hat jemand dafür eine lösung parat. Ist sehr schade da unsere Ärzte sehr gern das Asklepios logo ind er Signatur haben wollen. Und momentan erstmal die nur über ne dienstanweisung gelöst werden konnte die das verbietet. mfg
22. Februar 2007 um 15:57
Danke, das war genau was wir gesucht haben.
Es hat zwar nicht sofort funktioniert, aber mit ein bisschen Mühe lief es dann.
22. Februar 2007 um 16:06
Was mache ich falsch wenn E-Mails die von Outlook verschickt werden korrekt den Disclaimer enthalten, aber E-Mails welche automatisch von PHP auf dem gleichen Server mit mail() versendet werden, nicht?
22. Februar 2007 um 17:25
@alex Du hast in deinem Skript die Debug Option gesetzt – kann ich irgendwo sehen, was altermime mit den Emails macht?
22. Februar 2007 um 17:26
mal wieder zu schnell getippt – ich meien natürlich Frank
22. Februar 2007 um 18:56
@Simon: Wahrscheinlich ist die Domain der Mails, die Du direkt über mail() sendest nicht als Sender-Domain in Deinem Filterscript eingetragen.
@Tobias: Leite den Output von Altermime einfach in eine Datei in ein für den Filter-User beschreibbaren Verzeichnis, also z.B.:
$ALTERMIME –input [...] >>/tmp/altermime.log
Gruß
Stefan
22. Februar 2007 um 23:40
danke stefan – das log tut jetzt soweit. Hab jetzt die problematische Stelle gefunden – kann damit aber leider nichts anfangen.
mime_alter.c:1540:AM_add_disclaimer:DEBUG: Main Headers have been read
mime_alter.c:1578:AM_add_disclaimer:DEBUG: Inserting disclaimer into an email with no boundary
mime_alter.c:1229:AM_add_disclaimer_no_boudary:DEBUG: Inserting disclaimer into a non-boundary email
mime_alter.c:1238:AM_add_disclaimer_no_boudary:DEBUG: Conditions right for HTML disclaimer to be added
mime_alter.c:946:AM_add_disclaimer_insert_html:DEBUG: Starting to attempt to insert HTML disclaimer
WARNING: Could not insert HTML disclaimer into email
mime_alter.c:1263:AM_add_disclaimer_no_boudary:DEBUG: Done, text-inserted=0, html-inserted=0
mime_alter.c:1581:AM_add_disclaimer:DEBUG: Inserting done, txt-inserted=0 html-inserted=0
Done.
Sagt das jemandem was?
24. Februar 2007 um 10:25
Hi Folks,
ich sehe Ihr habt jede Menge Erfahrungen gesammelt.
Ich habe bei uns auch altermime im Einsatz und es funktioniert soweit.
Mein Problem ist jetzt nur, da wir nur einen Mailserver verwenden für incoming and outgoing mail werden die disclaimer an alle mails angehängt. Also auch an die, die nur für internen gebrauch sind.
Hat jemand eine Idee wie ich disclaimer nur an mails anhängen kann die unser haus verlassen sollen?
Danke Thomas
25. Februar 2007 um 11:01
@Thomas: lies einfach den Beitrag ganz oben …
28. Februar 2007 um 13:36
Hallo zusammen,
vielleicht koennt ihr mir helfen:
habe nach der guten Anweisung von oben alles so eingebaut:
[master.cf]
…
smtp inet n – n – – smtpd
-o content_filter=lmtp:127.0.0.1:10030
pickup fifo n – n 60 1 pickup
-o content_filter=lmtp:127.0.0.1:10030
…
## ## Added by Kaspersky Anti-Virus Installer ##
127.0.0.1:10030 inet n n n – 20 spawn
user=kluser argv=/opt/kav/5.5/kav4mailservers/bin/smtpscanner
127.0.0.1:10031 inet n – n – – smtpd
-o content_filter=discl:
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
discl unix – n n – – pipe
flags=Rq user=discl argv=/etc/postfix/disclaimer -f ${sender} — ${recipient}
[end of master.cf]
Leider kommt Postfix mit der Fehlermeldung zurueck, mit der ich nichts so recht anfangen kann:
Feb 28 12:28:18 mail postfix/lmtp[21421]: 1A82A7EF: to=, relay=127.0.0.1[127.0.0.1], delay=0, status=bounced (host 127.0.0.1[127.0.0.1] said: 552 Error ! (in reply to end of DATA command))
WAS habe ich falsch gemacht???
Viele Gruesse & danke
-Oliver
28. Februar 2007 um 19:18
Hi Oliver,
habe gerade nur kurz auf Deine master.cf geschaut.
<Vermutung>
Entferne einmal den Content-Filter aus der “pickup”-Zeile, Du stolperst irgendwie über den lmtp.
</Vermutung>
Gruß
Stefan
1. März 2007 um 13:55
Zum Grusse,
nun bastel ich schon seit zwei tagen an dieser Disclaimer-Geschichte.
im Grunde sollte ich einfach die Signatur im Usermin für jeden User einbauen, aber ich will wissen wie es geht b.z.w. was ich falsch mache.
Problem an der Sache ist, ich hab den Server nicht eingerichtet und weiss nicht was da sonst alles noch so läuft.
Soweit ich das feststellen konnte werkelt hier ein Amavis mit Spamassasin.
Hier mal einfach die Felermeldungen aus der /var/log/mail:
Mar 1 11:57:39 haupthaus postfix/master[23748]: fatal: /etc/postfix/master.cf: line 75: bad transport type: smtp_data_done_timeout=1200
Mar 1 12:10:20 haupthaus postfix/postfix-script: fatal: the Postfix mail system is not running
Mar 1 12:11:03 haupthaus postfix/postfix-script: starting the Postfix mail system
Mar 1 12:11:03 haupthaus postfix/master[26411]: fatal: /etc/postfix/master.cf: line 76: bad transport type: disable_dns_lookups=yes
Mar 1 12:15:45 haupthaus postfix/postfix-script: starting the Postfix mail system
Mar 1 12:15:45 haupthaus postfix/master[26561]: fatal: bind 127.0.0.1 port 10025: Address already in use
Mar 1 12:21:07 haupthaus postfix/postfix-script: starting the Postfix mail system
Mar 1 12:21:07 haupthaus postfix/master[26652]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:
Mar 1 12:26:42 haupthaus postfix/postfix-script: starting the Postfix mail system
Mar 1 12:26:42 haupthaus postfix/master[26807]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:
Mar 1 12:51:27 haupthaus postfix/postfix-script: starting the Postfix mail system
Mar 1 12:51:27 haupthaus postfix/master[27267]: fatal: /etc/postfix/master.cf: line 78: bad transport type: content_filter=dfilt:
meine master.cf:
smtp inet n – n – 2 smtpd -o content_filter=smtp:[127.0.0.1]:10024
#628 inet n – n – – qmqpd
pickup fifo n – n 60 1 pickup
cleanup unix n – n – 0 cleanup
qmgr fifo n – n 300 1 qmgr
#qmgr fifo n – n 300 1 oqmgr
#tlsmgr unix – – n 1000? 1 tlsmgr
rewrite unix – – n – – trivial-rewrite
bounce unix – – n – 0 bounce
defer unix – – n – 0 bounce
trace unix – – n – 0 bounce
verify unix – – n – 1 verify
flush unix n – n 1000? 0 flush
proxymap unix – – n – – proxymap
smtp unix – – n – – smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix – – n – – smtp
-o fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n – n – – showq
error unix – – n – – error
discard unix – – n – – discard
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – n – – lmtp
anvil unix – – n – 1 anvil
#localhost:10025 inet n - n - - smtpd -o
content_filter=
#^^die hab ich auskommentiert
scache unix - - n - 1 scache
maildrop unix – n n – – pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus unix - n n - - pipe
user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender – $nexthop!rmail ($recipient)
ifmail unix – n n – – pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix – n n – – pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
procmail unix – n n – – pipe
flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient}
smtp unix – - n – 2 smtp
#-o smtp_data_done_timeout=1200
#-o disable_dns_lookups=yes
#^^die beiden hab ich dann auch mal auskommentiert
localhost:10025 inet n – n – - smtpd
-o content_filter=dfilt:
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} — ${recipient}
1. März 2007 um 13:58
Ach ja….
……
74 smtp unix – - n – 2 smtp
75 #-o smtp_data_done_timeout=1200
76 #-o disable_dns_lookups=yes
77 #^^die beiden hab ich dann auch mal auskommentiert
78 localhost:10025 inet n – n – - smtpd
79 -o content_filter=dfilt:
……
2. März 2007 um 04:18
dieses Problem hab ich gelöst,^^ allerdings macht er irgendwie nix die mails werden nicht mit einem Disclaimer versehen
localhost:10025 inet n – n – - smtpd
-o content_filter=dfilt:
wenn ichs so lasse^^ bekomme ich den Fehler: Mar 2 02:56:44 haupthaus postfix/master[5943]: fatal: bind 127.0.0.1 port 10025: Address already in use
ich dachte mir ich nehm einfach den nächsten port also 10026 aber wie gesagt macht er nix
diese Konfigurationsdatei hab ich erstellt
da steht nur nix drin
wäre über Hilfe dankbar.
MFG Mathias
2. März 2007 um 16:13
Hi,
hat noch jemand Probleme mit Umlauten in der Mail?
Sobald ein Umlaut in der Email ist, wird die HTML-Signatur unschön.
Ser gut zu sehen in der T-Online Weboberfläche. Es tauchen “=” auf.
Wenn ich darauf achte keine Umlaute in die Mail zu schreiben funktioniert es sehr gut?
Jemand eine Idee?
Ansonsten keine Probleme mit Umlaute.
System: Debian Sarge mit UTF-8.
MFG
Stephan
6. März 2007 um 18:47
Ich habe riesige Probleme!
Das Tool funktioniert zwar grundsätzlich ABER:
1.
Wenn eine E-Mail UTF8 codiert wird (das passiert im Outlook sobald man ein Eurozeichen in die E-Mail einträgt), hängt das Tool den Disclaimer nicht dran.
2.
Noch viel schlimmer kommts wenn die E-Mail ISO codiert ist: Sobald eine E-Mail einen Punkt “.” auf einer ansonsten leeren Zeile stehen hat, schneidet das Tool die komplette E-Mail ab dort ab.
Hat jemand ähnliche Erfahrungen gemacht, oder sogar eine Lösung?
Rene
6. März 2007 um 19:37
Wenn Ihr keine Umlaute in den Disclaimer schreibt (ist doof, ich weiß), sollte es funktionieren, denn in diesem Fall ändert altermime nicht die Kodierung der Original-Mail.
Das mit dem Abschneiden der Mail nach der Zeile mit dem Punkt liegt daran, dass für SMTP der DATA-Bereich und damit der eigentliche Mailtext zu Ende ist (siehe beispielsweise den untersten Code-Abschnitt in diesem Artikel: SMTP-Auth mit telnet testen).
Da fällt mir jetzt ad hoc auch keine Abhilfe ein
7. März 2007 um 15:36
Hallo!
Ich habe das Script auch bei uns laufen.
Jetzt ist natürlich nur die Frage wie man es “abschalten” kann dass auch alle internen EMails den Dissclaimer kommen.
Ich hatte folgendes ausprobiert.
# Domain aus uebergebener Absenderadresse filtern:
DOMAINFROM=${2##*@}
# Domain aus uebergebener Empfaengeradresse filtern:
DOMAINTO=${4##*@}
#
if [ $DOMAINFROM == $SENDER_DOMAIN -a $DOMAINTO != $SENDER_DOMAIN ]; then
$ALTERMIME –input=in.$$ \
–disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
–disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
–xheader=”Organisation: TDDK GmbH” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
else
$ALTERMIME –input=in.$$ \
–xheader=”x-Information: Processed by Altermime” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
Aber wenn ich jetzt eine Mail an mehrere Adressen sende und die erste Empfängeradresse eine interne und die zweite eine externen Adresse, dann wird natürlich kein Disclaimer angehangen.
Hat jemand von euch villeicht eine Idee wie ich den Disclaimer an interne Adressen vermeide?????
27. März 2007 um 15:40
Hallo,
habe es jetzt nach viel Gehirnschmalz auch bei mir laufen. Bei mir musste ich die Änderungen wie Heiko vom 7.03. geschrieben hat auch durchführen. Wird eine Mail an mehrere eMail Adresse gesendet (externe und interne gemischt), so wird bei mir der Disclaimer angehängt, das stört mich nicht weiter. Aber …
kann man das Problem mit der Leerzeile mit einem PUNKT in Griff bekommen?
Schicke ich eine Mail weg und füge noch eine Zeile mit dem Inhalt “.” ein, so wird die Mail ab dort abgebrochen. Vielleicht hat jemand einen Tipp dazu.
Viele Grüße
Jörg Peter
28. März 2007 um 13:23
Hallo,
bei mir landen die Mails leider in einer Schleife, was Postfix mit “too many hops” quitiert. Ich nutze ebenfalls Amavis. Ändert sich denn die Zeile in der main.cf “content_filter = smtp-amavis:[127.0.0.1]:10024″? Ansonsten hab ich alles genau wie oben beschrieben, aber die Schleife bleibt.
28. März 2007 um 22:21
Hallo Joerg Peter,
ich habe ein Lösung gefunden wie ich alle Empfänger-Domains ein einer Schleife auslese und dann vergleiche.
Damit wird der Disclaimer angehangen, wenn eine externe Adresse enthalten ist.
Leider klappt das nur bis 6 Empfäger richtig, schicke ich eine Mail an beispielsweise 7 Empfänger die alle eine interne Adresse haben wird der Disclaimer trotzdem drangehangen.
Das hat irgendetwas mit insgesamt 10 Übergabeparametern zu tun.
Jetzt bastel ich gerade an einer Version in der ich einfach eine Funktion aufrufe, an die alle Parameter übergeben werden und mit switch die Parameter ab der ersten Empfäger-Adresse immer ermittelt werden, wenn dann eine externe Adresse dabei ist, wird die Funktion mit return 1 beendet.
Den Return Wert will ich nun Prüfen und wenn er 1 ist soll der Disclaimer angehangen werden.
Das klappt aber nicht ganz….
Kann mir jemand helfen?
Ich stelle das Script morgen hier rein…
28. März 2007 um 22:25
AN Joerg Peter nochmal!
Das Problem mit dem “.” wirst du nciht wegbekommen.
Das ist das Syntax von SMTP.
Du kannst einfach mal spaßeshalber eine EMail mit deinem Mail Programm schreiben.
Text:
“Hallo das ist
.
ein Test”
Du wirst sehen das selbst da nur das “Hallo das ist” ankommt.
MfG
Heiko
29. März 2007 um 16:15
Habe es nun hinbekommen!
Ich übergebe einfach alle Übergabeparameter an eine Funktion.
In der Funktion gehe ich dann alle Empfänger mit Switch durch.
Sobald ein externer ermittelt wird, wird die Funktion beendet und ein Rückgabe Wert festgelegt.
Mit hilfe dessen ich dann einen Disclaimer anhänge oder nciht.
Hier das vollständige Script:
”
#!/bin/bash
#
# Deklarieren der Work Folder
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
ALTERMIME=/usr/bin/altermime
#
# Deklarieren der SENDER-Domain
SENDER_DOMAIN=test.de
#
# Fehlercodes:
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
#
# Aufraeumen nicht vergessen:
trap “rm -f in.$$” 0 1 2 3 15
#
# Uebergebe Sender Adresse ermitteln
SENDER=${2}
# Domain aus uebergebener Absenderadresse filtern:
DOMAINFROM=${2##*@}
function checkrecipients {
shift 3
PARAM=$#
for (( I=1; $I in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }
#Wenn Rueckgabewertes = 10 dann wird der Disclaimer angehangen
if [ $Wert == 10 ]; then
$ALTERMIME –input=in.$$ \
–disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
–disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
–xheader=”ORGANISATION: Test” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
fi
# Weitersenden der Email
$SENDMAIL “$@”
29. März 2007 um 16:17
Hier das Script, das obere ist leider unvollständig!
”
#!/bin/bash
#
# Deklarieren der Work Folder
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
ALTERMIME=/usr/bin/altermime
#
# Deklarieren der SENDER-Domain
SENDER_DOMAIN=test.de
#
# Fehlercodes:
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
#
# Aufraeumen nicht vergessen:
trap “rm -f in.$$” 0 1 2 3 15
# Domain aus uebergebener Absenderadresse filtern:
DOMAINFROM=${2##*@}
function checkrecipients {
shift 3
PARAM=$#
for (( I=1; $I in.$$ || { echo Kann eMail nicht speichern; exit $EX_TEMPFAIL; }
#Wenn Rueckgabewertes = 10 dann wird der Disclaimer angehangen
if [ $Wert == 10 ]; then
$ALTERMIME –input=in.$$ \
–disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
–disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
–xheader=”ORGANISATION: Test GmbH” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
fi
# Weitersenden der Email
$SENDMAIL “$@”
5. April 2007 um 14:45
Problem mit dem Punkt auf einer einzelnen Zeile lösen:
aus
SENDMAIL=/usr/sbin/sendmail
wird
SENDMAIL=”/usr/sbin/sendmail -i”
5. April 2007 um 16:46
@Marc Vieelen lieben Dank für den Hinweis, das hat mir mein Ostern gerettet
Wünsche allen frohe Feiertage!
12. April 2007 um 11:01
Hallo erstmal
eine wirklich sehr gute Anleitung zur Konfiguration mit Postfix.
Auch bei uns läuft es fast reibungslos, nur HTML-E-Mails aus Outlook erhalten den Disclaimer fehlerhaft. Der Disclaimer enthält dann Leerzeichen an Stellen wo keine waren und Gleichheitszeichen. Ich habe schon jede erdenkliche Codierung getestet, immer das gleiche ergebnis.
Mails, die per Thunderbird versandt worden sind, funktionieren dagegen perfekt.
Ich hoffe jemand kann mir helfen
13. April 2007 um 11:59
Naja erstelleinen disclaimer.txt und einen disclaimer.html
im Script noch anpassen und fertig
13. April 2007 um 12:03
das hab ich gemacht. wie gesagt, wenn ich mit dem Thunderbird sowohl html-e-mails als auch plaintext versende erscheint der disclaimer überall tadellos. nur aus outlook heraus gibts probleme.
16. April 2007 um 10:43
Bei mir klappts mit 200 clients (Outlook 2000)
Nur, wenn man die Absenderdomain nicht ausnimmt werden Besprechungsanfragen verrissen… die Erkennt er nicht mehr als Anfragen.
16. April 2007 um 12:18
also ich benutze die version 0.3.3
bei dieser funktionieren die disclaimer einwandfrei
sowohl plain text / html und auch mit anhängen.
bei den anderen versionen danach funktioniert entweder der disclaimer nicht vernünftig oder er wird nicht angehangen.
16. April 2007 um 13:20
@Andreas W.: In der aktuellen Development-Version sollte altermime Besprechungsanfragen richtig verarbeiten:
18. April 2007 um 09:25
Ja “sollte” – Leider tut es das nicht. An den Einladungen hängt trotzdem die Signatur.
Habe vorhin extra nochmal den aktuelle Source (DEV) gezogen:
alterMIME v0.3.8 (Jan-24-2007)
Einstellungen in Outlook “alle Einladungen im iCal Format senden”
18. April 2007 um 13:30
calendar=$(cat in.$$ | grep -o text/calendar)
if [ "$DOMAIN" == "$SENDER_DOMAIN" ] && [ "$calendar" != "text/calendar" ] ; then
$ALTERMIME –input=in.$$ \
–disclaimer=/etc/postfix/disclaimer/disclaimer.txt \
–disclaimer-html=/etc/postfix/disclaimer/disclaimer.html \
–xheader=”ORGANISATION: Test GmbH” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
So gehts auch….
18. April 2007 um 13:47
Eine super Idee
so bekommt man evtl. auch das Problem in den Griff, dass die Signierung von Mails zerstört wird (siehe ersten Kommentar von Thinker):
Ist noch nicht getestet, unterläuft dann auch den eigentlichen Zweck des Disclaimers, sofern geschäftliche Mails signiert werden. Aber wer seine Mails sowieso schon signiert, sollte auch dazu zu bewegen sein, die Handelsregisterangaben des Unternehmens in seine Text-Signatur mit aufzunehmen…
18. April 2007 um 16:44
Naja, ist momentan ein Workaround. Ich habe erst den sauberen Weg getestet und mit dem Entwickler gesprochen. Er vermutet durch den Sprachunterschied ein Problem – konnte ich im Sourcecode nicht nachvollziehen. Hab ein Debug-Log erstellt und gemailt.
Der Nachteil dieser Lösung ist, dass nicht ein Header geprüft wird – sonder nach dem Text gesucht. Dann kann ein Mitarbeiter der das mitbekommt einfach application/pgp-signature oder text/calendar in die Mail tippen und die Pflichtsignatur ist weg.
Wenn ich ne Info habe, melde ich mich auf jeden Fall wieder
10. Mai 2007 um 17:03
Hallo,
eigentlich habe ich gedacht, das klappt alles wunderbar bei meiner Installation
) . Im Prinzip stimmt das auch. Ich habe den ganz einfachen Fall einer Postfix konfiguration durch die nur ausgehende Mails laufen und an alle soll der disclaimer angehängt werden. Das klappt eigentlich auch hervorragend, nur mit “Text-Mails” habe ich ein Problem. Der interne Mailer mach leider aus einer Text-Mail eine MIME-Mail mit ungültiger MIME-Struktur, d.h. er packt oben einen mime-part dran, dann kommt der beginn eines weiteren mime-parts, dann der originaltext und dann ist Ende, wie bei einer ASCII-Mail – also kein schliessendes boundary.
Konsequenterweise weigert sich altermime, den footer anzufügen; ich habe schon den code angeschaut aber noch nicht gefunden, wie ich ihn so manipulieren könnte, dass er auch in diesen Fällen einen footer anfügt. Das ist im Prinzip natürlich gefährlich, aber in diesem Fall ist die Umgebung total kontrolliert und es kommen nur HTML-Mails (die sowieso korrekt verarbeitet werden) vor und eben diese pseudeo-text-mails, die immer die gleiche Struktur haben. Hat jemand eine Idee ?
Grüße,
Jakob Curdes
26. Mai 2007 um 09:05
Es fehlt eine Prüfung auf
application/pkcs7-mime
application/x-pkcs7-signature
damit smime signierte und/oder verschlüsselte Mails diesem Verfahren nicht unterzogen werden (würde dem Sinn von Singnierung ja zuwieder laufen).
Gruß
19. Juli 2007 um 18:39
Wie kann man einfügen von disklaimer bei weiterleitung abschalten?
Danke!
19. Juli 2007 um 23:04
@Evgenij: Da fällt mir auf die Schnelle leider keine zufriedenstellende Lösung zu ein. Denn eine Weiterleitung lässt sich leider nicht einfach über eine Headerzeile in der Mail erkennen, und eine Durchforstung des eMail-Betreffs auf “Fwd”, “WG”, … wäre auch nicht wirklich zuverlässig.
Zum Umlaut-Problem: Ich hatte das Problem jetzt kürzlich auch auf einem Mailserver.
Gelöst hat sich das Ganze durch Zufall, beim letzten Update von Spamassassin. Hier mein Glücksgriff.
30. Juli 2007 um 08:42
Ich hab das jetzt genau so gemacht wie angegeben. Die Text wird allerdings nicht angehängt, logfile wird keines erstellt und in /var/log/mail.log wird nichts vom Filter aufgeführt.
Ich fahre Debian Sarge und hab das ganze mit altermime-0.3.8 und 0.3.3 probiert.
30. Juli 2007 um 11:07
Ich habe jetzt bemerkt dass das script gar nicht aufgerufen wird. Also muss es an der master.cf liegen, was ist falsch?
http://seb-com.de/master.cf
30. Juli 2007 um 12:31
Du hast in Deiner master.cf amavis nicht aufgerufen (wie bei uns mit: content_filter=smtp-amavis:[127.0.0.1]:10024 beim SMTP-Service) , wartest aber dann auf Port 10025 auf die von dort zurückgegebenen, gefilterten Mails. Erst dann rufst Du als Content-Filter “dfilt” auf.
Wenn Du amavis nicht einsetzt, erweitere die Zeile für SMTP um den Content-Filter dfilt:
30. Juli 2007 um 14:59
Mh, ok das leuchtet mir jetzt ein. Vielen Dank!
Und funktionieren tut es jetzt auch noch, oh man ist das schön
1. August 2007 um 10:45
Eine Frage noch, wie kann ich den Text nur für eine bestimmte Mail-Adresse zuschneiden?
2. August 2007 um 12:42
Du kannst einfach das Filter-Script entsprechend anpassen, etwa in der Art:
Jetzt musst Du nur noch fuer die einzelnen Absender entsprechende Dateien unter /etc/postfix/disclaimer anlegen.
Gruß
Stefan
28. August 2007 um 11:19
wg Leerzeichen / Zeilenumbrüche in Signatur (bei html-Format) Mal im source der versandten Mail gekuckt: nach x Zeichen (ich glaub 72) kommt zwangsweise ein Umbruch, egal ob vorher ein linebreak war. Der Umbruch wird im Source sichtbar: da steht dann ein Leerzeichen gefolgt von einem =. Das = wird nicht ausgegeben, aber das Leerzeichen schon. Das macht natürlich im HTML ein Leerzeichen, wo garkeins hingehört, z.B. mitten im Wort. Wie gesagt: ich hab mir den Quelltext der empfangenen html-Mails mal angesehen und bin zu folgender Lösung gekommen:
Diese zwei Zeilen werden wie 1 Zeile gelesen: (sozusgen kein html-break drin, und zeilenumbruch wird dann ignoriert)
blablabla blablabla
2. zeile blablabla irgendein text
Also habe ich einfach die Zeilen mit Leerzeichen aufgefüllt (bissl experimentiert, ob 72 Zeichen pro Zeile oder 76 oder was auch immer):
blablabla 1. zeile……………
2.zeile………………………………………………………..
usw……………………………………………….
Dann sieht alles sauber aus beim Empfänger.
hth
17. Oktober 2007 um 17:53
Vielen Dank für den Howto.
Ich möchte mal wissen ob es auch möglich ist um ein Disclaimer im MySQL zu setzen.
19. Oktober 2007 um 14:21
Da Altermime als Parameter nur den Pfad auf eine Datei, die den Disclaimer-Text enthält entgegennimmt, nicht aber den Text selbst, hast Du leider keine einfache Möglichkeit, die gewünschten Daten über eine Datenbankabfrage zu ermitteln.
Die einzige Möglichkeit, z.B. je nach Absendeadresse unterschiedliche Fußtexte an die ausgehenen eMails zu hängen ist, für jeden Disclaimer eine eigene Datei anzulegen, und diese im Shellscript je nach Absender ($2) über ein if-Konstrukt zuzuweisen (siehe meinen Kommentar vom 2.8.2007).
5. Januar 2008 um 19:22
Hi Leute!
Ich hab ein Problem und zwar kommen die E-Mails nicht an, laut log werden sie einwandfrei gefiltert, aber sie werden nach dem filtern anscheinend nicht mehr weitergeleteitet oder gesendet, hier der log-Eintrag:
Jan 5 19:02:57 debian-test2 postfix/pipe[11117]: 64799C7BC9: to=, relay=dfilt, delay=0.13, delays=0.07/0.02/0/0.04, dsn=2.0.0, status=send (delivered via dfilt service)
Kann sich das jemand erklären?
Viele Grüße,
Martin
7. Januar 2008 um 19:41
Hi Martin,
zwei Dinge sind komisch an Deinem Log-Eintrag:
- Hinter “to=” sollte die Empfänger-Mail-Adresse folgen
- statt “send” sollte “sent” in der Zeile stehen
Ich vermute einen Fehler in der master.cf oder falsche Zugriffsrechte auf Dein Filter-Script.
Wobei mir Zweiteres weniger wahrscheinlich erscheint, da in diesem Fall zumindest die eMail-Adresse nach dem “to=” auftauchen sollte.
10. Februar 2009 um 19:13
Hey,
habe das Howto durchgearbeitet und auch die Komentare beachtet, aber bei mir will es nicht laufen,
ich bekomme keine fehlermeldungen in der log, die email kommt beim empfänger an aber ohne disclaimer
10. Februar 2009 um 20:55
@Stefan R
Hast Du die master.cf überprüft (siehe ein paar Kommentare weiter oben)? Außerdem musst Du sicherstellen, dass altermime ausführbar ist und auch auf den Disclaimer-Text zugreifen kann.
11. Februar 2009 um 14:12
@Stefan
danke für die Antwort.
die master.cf hab ich geprüft
inhalt:
#
# DO NOT SHARE THE POSTFIX QUEUE BETWEEN MULTIPLE POSTFIX INSTANCES.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n – n – – smtpd
-o content_filter=dfilt:
#628 inet n – n – – qmqpd
pickup fifo n – n 60 1 pickup
cleanup unix n – n – 0 cleanup
qmgr fifo n – n 300 1 qmgr
#qmgr fifo n – n 300 1 nqmgr
rewrite unix – – n – – trivial-rewrite
bounce unix – – n – 0 bounce
defer unix – – n – 0 bounce
flush unix n – n 1000? 0 flush
proxymap unix – – n – – proxymap
smtp unix – – n – – smtp
relay unix – – n – – smtp
-o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n – n – – showq
error unix – – n – – error
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – n – – lmtp
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix – n n – – pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
# old-cyrus unix – n n – – pipe
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
procmail unix – n n – – pipe
flags=R user=nobody argv=/usr/bin/procmail -t -m /etc/procmailrc $(sender) $(recipient)
dfilt unix – n n – – pipe
flags=Rq user=filter argv=/etc/postfix/disclaimer/filter -f ${sender} — ${recipient}
altermime kann ich ausführen und bekomm die befehlsliste.
12. Februar 2009 um 22:01
ok mittlerweile geht nen teil.
nun bekomm ich den fehler, wenn ich ne mail verschicke:
(expanded from ): bad address syntax
also ich bekomm dann vom postfix ne email zurück
…
If you do so, please include this problem report. You can delete your own text from the attached returned message.
The mail system
(expanded from ): bad address syntax
12. Februar 2009 um 22:41
ich hab mein Problem gefunden!
Amavis gibt die email an Altermime, altermime wieder zu amavis!
danach bekomm ich
to many hops …
ich verzweifle noch.
sorry für die vielen komentare ;/ aber google ist nicht sehr hilfreich gerade
15. Februar 2009 um 13:47
Wie rufst Du denn amavis auf? In der von Dir geposteten master.cf steht nichts davon.
9. Juni 2009 um 14:08
Hallo,
ich habe jetzt auf Version 3.10 upgedatet, weil ich ein Problem hatte und dachte ich könnte es mit dem Update lösen. Okay, ging nicht. Und zwar werden manche eMail Anlagen einfach gelöscht. Und zwar wird der Filter auch aufgerufen bei Mails die ich empfange. Und bei denen wird dann kein Disclaimer angehängt, aber die Anlagen werden nicht “durchgereicht”. Außerdem habe ich dann versucht das >>/tmp/altermime.log zu füllen, was aber immer leer ist. Daher ist meine Fehlersuche nur sehr eingeschränkt möglich. Hier mein Codesnip
if [ $DOMAIN == $SENDER_DOMAIN1 -o $DOMAIN == $SENDER_DOMAIN2 -o $DOMAIN == $SENDER_DOMAIN3 ]; then
echo $ALTERMIME –input=in.$$ \
–debug –verbose \
–xheader=”X-Copyrighted-Material: $COPYRIGHT_HEADER” || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
else
Wie bzw. wo muß ich dieses >> /tmp/altermime.log eintragen damit alles reingeschrieben wird *grübel*. Gibt es eine Möglichkeit zu sagen “so wie sie ist weiterleiten”?
Cu
Jörg Peter
10. Juni 2009 um 08:26
Hallo Jörg Peter,
klar, das Script wird für alle Mails aufgerufen, deswegen ja auch die Abfrage der $DOMAIN in dem Script selbst, um altermime nur für ausgehende Nachrichten aufzurufen.
Das “>> /tmp/altermime.log” gehört an das Ende der Zeile “$ALTERMIME –input …”, wobei in Deinem Post noch ein Fehler im Script ist.
Das “echo” vor “$ALTERMIME” muss weg.
Das Problem, dass Anlagen von Mails unterschlagen werden, habe ich nicht. Was ich mir vorstellen kann, ist dass im E-Mail-Text in einer Zeile nur ein Punkt steht, was normalerweise das Ende der Mail anzeigt.
Im Kommentar von Marc vom 5.April 2007 gibt’s eine Lösung hierzu.
Gruß
Stefan