Kleine und große Linux AHAs
Und heute im Ü-Ei: Advanced Disclaimer für Postfix
Ob ein Disclaimer sinnvoll ist oder nicht, das kann ich noch nicht einmal genau sagen. In dem Buch von Peer Heinlein ist zu lesen, dass er keine Rechtskraft hat. Er hat in seinem Postfix Buch auch nichts über einen Disclaimer geschrieben. Trotzdem ist es so, dass es sich in den Firmen irgendwie durchgesetzt hat dass man sowas haben muss.
Die Qual der Wahl
Sucht man im Internet nach einem Programm für Postfix um einen Disclaimer in Mails einzufügen, so wird man im Prinzip nur einen Treffer erhalten: altermime. Altermime übergibt man einfach ausgedrückt zwei Dateien. Eine einfache Textdatei und eine HTML Datei. Diese beiden werden von altermime jeweils am Ende des Text, bzw. des HTML Blocks in die eMail eingefügt.
Ganz toll, aber
Um altermime herum wird quasi ein Wrapper Script gebaut, welches die Parameter zusammensetzt und ein paar Checks im vorhinein macht. Dieses Script kann in der Basisversion einfach nur immer einen Disclaimer einfügen.
Nun ist man ja verwöhnt und Manager sehr kreativ. Was nun, wenn ich verschiedene Domains auf einem Server betreibe? Ich benötige dann auch verschiedene Disclaimer. Was nun, wenn ich nur für ausgehende eMails Disclaimer möchte? (dafür gibt es ein paar Beispiele im Internet). Und was, wenn ich für einen oder bestimmte Benutzer vielleicht gar keinen Disclaimer einfügen darf?
So geht das
Ich habe kurzerhand das Script ein wenig erweitert. Die Basis bildet dabei natürlich das Standard Script. Auf die eigentliche Installation gehe ich nicht ein, ich zeige Euch hier nur das erweiterte Wrapper Script.
Funktionen:
- Disclaimer per Domain
- Default Disclaimer (für alle, für die es keinen Domain Disclaimer gibt)
- Disclaimer nur für ausgehende Domains (bzw. für alle, die nicht im Script hinterlegt sind)
- Disclaimer kann für einzelne Mailboxen (Sender eMailadressen) ausgeschaltet werden
Hier nun das Script:
#!/bin/bash
#
# Advanced Disclaimer
# - Disclaimer per Domain
# - Default Disclaimer
# - Disclaimer for outbound [y|n]
# - disable Disclaimer for named sender addresses
#
# For each Domain there "should/could" be two files in
# $DISCLAIMERS_PATH named like the Domain in .txt and .html
# ex: localdomain.com.txt and localdomain.com.html
#
# Files for the default Domain Parameter must exist.
#
# Uses altermime
#
# THIS SCRIPT NEEDS Bash > 4 to work !!!
# - Thanks to Olaf
#
# Ronny Becker, 09.2010 - 05.2011
#
#
# to configure
# Domains that are not required to have disclaimer
EXCLUDE_REC_DOMAINS="-localdomain.com-"
# Users that should not have a disclaimer
EXCLUDE_SENDER="nodisclaimer@localdomain.com"
# default disclaimer
# (in DISCLAIMERS_PATH as $DEFAULT_DISCLAIMER.txt and $DEFAULT_DISCLAIMER.html)
DEFAULT_DISCLAIMER="localdomain.com"
# --
DISCLAIMERS_PATH="/etc/postfix/disclaimerfiles"
INSPECT_DIR=/var/spool/altermime
SENDMAIL=/usr/sbin/sendmail
# Exit codes from
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$" 0 1 2 3 15
# Start processing.
# get recipients domain
REC_DOMAIN=${4##*@}
# get senders domain
S_DOMAIN=${2##*@}
# checks
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
# save temp file
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
# check if mail matches exclude domains or (send-)users, then send without
if [[ $EXCLUDE_REC_DOMAINS =~ -${REC_DOMAIN}- ]] || [[ $EXCLUDE_SENDER =~ $2 ]]; then
$SENDMAIL -i "$@"
Achtung Zeichensatz!
Die .html Datei sollte dem HTML Standard entsprechen. Das bedeutet, dass Umlaute im HTML Format in der Datei stehen.
Die Textdatei muss in der Codierung vorliegen, in der auch die eMails verschickt werden. So ist auf vielen Linux Systemen (Server) der Standard Zeichensatz UTF-8. Mails werden allerdings meist in ISO-8859-8/15 verschickt. So muss man also darauf achten, dass der Disclaimer in der Textversion im ISO Format vorliegt.
Doppelte Disclaimer?
Nein. Altermime ist so intelligent, dass er erkennt wenn der Disclaimer bereits eingefügt ist. Dadurch kann man dann auch die beliebten Frage & Antwort Spielchen per Mail betreiben, ohne 20x den Disclaimer durch die Welt zu schicken.
| Artikel drucken | Dieser Beitrag wurde von Ronny am 8. September 2010 um 08:17 veröffentlicht und unter bash, MailMig, Systemmanagement, ubuntuusers.de abgelegt. Du kannst allen Antworten zu diesem Beitrag durch RSS 2.0 folgen. Du kannst direkt zum Ende gehen und einen Kommentar hinterlassen. Pings ist momentan nicht möglich. |







vor 1 Jahr
Klasse! Die Möglichkeit, einen Disclaimer abhängig von der Absendeadresse zu setzen, habe ich schon vor einiger Zeit gesucht, dann aber aus Zeitgründen wieder verworfen.
Deine Erweiterung werde ich die Tage mal testen.
vor 1 Jahr
Mach das und gib mir Feedback !
vor 1 Jahr
Man muss sich natuerlich im Klaren darueber sein, dass das Anfuegen eines Disclaimers im MTA jegliche Signierung der E-Mails, sei es durch S/MIME oder PHP/GnuPG, invalidiert.
Meiner Meinung nach ist der richtige Ort, um Disclaimer einzufuegen, der MUA und nicht der MTA. Ersteres kann man durch geeignete Corporate Policies durchaus forcieren.
vor 1 Jahr
Das ist richtig.
Allerdings hat man dann bei meiner Version die Möglichkeit, diejenigen als Ausnahme zu deklarieren.
vor 1 Jahr
Bei mir funktioniert das nicht. Wenn ich das Skript so auf meinem Ubuntu 8.04 einsetzte, erhalten interne und externe Empfänger keine Signatur. Irgendwie haut das nicht hin. Ich vermute, weil er an altermime übergibt und somit der Empfänger intern liegt, nicht extern, gleich ob ich eine interne oder externe Epfängeradresse nehme.
vor 1 Jahr
Hi,
Du kannst das ganze mit einem “set -x” debuggen. Wenn Du das machst kannst Du mir gerne den Output schicken.
Wichtig ist die korrigierte Version zu nutzen (s. Blog) !!
Ronny
vor 1 Jahr
Hi Ronny!
Ich komme ebenso wenig damit klar. Ok, ich bekomme einen Disclaimer bei ausgehen E-Mails und keinen bei internen. Schicke ich aber an mehrere Empfänger, so erhält der erste einen Disclaimer und alle weiteren keinen. Und erhalte ich eine E-Mail von extern, so wird dort ebenso der Disclaimer druntergehängt.
Das ist nicht wirklich der gewünschte Effekt. Wie kann ich das hinbekommen?
Und mit set -x? Wie kann ich dann das Skript prüfen? Ist mir nicht klar, was du da meinst.
vor 1 Jahr
Hi,
es gibt da ein paar Möglichkeiten Fehler zu finden. Die einfachste ist, das Script per Commandline selbst aufzurufen. Davor setzt man den Parameter “set -x” (oberhalb des Scriptes unter …/bin/bash…). Ich bin zur Zeit nicht in der Firma und kann die Parameter nicht genau nachsehen, aber ich glaube -f -r . Wenn Du das Script also damit direkt in der Konsole aufrufst siehst Du was das Script macht. Sollte Dir das nicht weiterhelfen kannst Du mir gerne den Output schicken.
Greetz
Ronny
PS: Wäre mir recht, wenn Du umfangreichere Fragen / Probleme direkt per Mail an mich schickst – das ist einfacher.