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.

10 Responses to Und heute im Ü-Ei: Advanced Disclaimer für Postfix

  1. Hallo Ronny,
    danke für deinen Beitrag. Ich bin auch gerade auf den Umlaute Fehler getroffen. Ich habe das Standardscript so verändert das ein unterschiedlicher Disclaimer für unterschiedliche Absender angehängt wird. Allerdings habe ich noch ein anderes Problem. Einige Menschen bei uns haben Umlaute in ihrem Namen. Da ich mir jetzt die Sender-Info mit diesem Befehl: from_address=`grep -m 1 “From:” in.$$ | cut -f 1 -d ‘@’ | cut -d “<" -f 2` hole, steigt das Skript an dieser Stelle aus und hängt nichts weiter an. Ich habe gesehen das du dir per REC_DOMAIN=${4##*@} die Domain holst. Wäre es auch möglich sich den User vor dem @ zu greppen? Ich bin im bash-skripten leider noch blutiger Anfänger. Für Hilfe wäre ich sehr dankbar!
    Daniel

    • Ronny

      Hallo,
      klar ist das möglich ;-)

      z.B. REC_USER=${ADDR%%@*} … die Variable $ADDR ist in dem Fall die Variable mit der Mailadresse.

      Cheers
      Ronny

  2. Tim

    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.

  3. joschi

    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.

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

      • Ronny

        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

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

      • Ronny

        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.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>