unix4fun

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 30 décembre 2011

Et son nom, il le signe de la pointe de l'épée ...

... ou à la fin de son mail (je sais c'est pas ça la chanson).

Et comme il est fainéant, il aimerait bien que ce soit automatique. Enfin surtout ses copains (qui sont pires que lui).

Si vous avez suivi vous avez vu que je découvre Postfix et son monde merveilleux. Ainsi j'ai découvert (bin oui puisque je découvre) que dans ce contexte là, quand on parle de signature, on en revient souvent à altermime.

J'ai donc mis en place cet outil plutôt sympa grâce à tous les supers tutoriaux qu'on trouve sur le net. Ma maigre contribution de cette fin d'année sera de vous donner le script qui permet d'avoir :

  • un mécanisme simple pour gérer les signatures user par user
  • un mécanisme simple pour gérer un disclaimer générique à un domaine
  • un mécanisme, je vous le donne en mille, simple, pour ne pas bégayer (signature en double etc)

Voilà le bousin :

#!/bin/sh
ALTERMIME=/usr/bin/altermime
ALTERMIME_DIR=/var/spool/altermime
SENDMAIL=/usr/sbin/sendmail
TEMPFAIL=75
UNAVAILABLE=69
cd $ALTERMIME_DIR || { echo $ALTERMIME_DIR does not exist; exit $TEMPFAIL; }
trap "rm -f in.$$" 0 1 2 3 15
cat >in.$$ || { echo Cannot write to $ALTERMIME_DIR; exit $TEMPFAIL; }

# d'abord on teste le mail pour voir si on n'a pas déjà rajouté le disclaimer
processed=`grep -m 1 "X-Disclaimer: yes" in.$$`
if [ -z "$processed" ]; then
        from_address=`grep -m 1 "From:" in.$$ | cut -d '<' -f 2 | cut -d '>' -f 1 | tr '@' '_'`
        from_domain=`grep -m 1 "From:" in.$$ | cut -d '@' -f 2 | cut -d '>' -f 1`
        signature_file="/etc/postfix/altermime/signatures/$from_address"
        disclaimer_file="/etc/postfix/altermime/disclaimers/$from_domain"
        # on cherche si on a une signature pour cet expéditeur
        if [ -e ${signature_file}.txt -a -e ${signature_file}.html ]; then
                $ALTERMIME --input=in.$$ \
                --disclaimer=${signature_file}.txt \
                --disclaimer-html=${signature_file}.html \
                --xheader="X-Disclaimer: yes" || \
                { echo Message content rejected; exit $EX_UNAVAILABLE; }
        fi
        # puis si on a un disclaimer générique pour son domaine
        if [ -e ${disclaimer_file}.txt -a -e ${disclaimer_file}.html ]; then
                $ALTERMIME --input=in.$$ \
                --disclaimer=${disclaimer_file}.txt \
                --disclaimer-html=${disclaimer_file}.html \
                --xheader="X-Disclaimer: yes" || \
                { echo Message content rejected; exit $EX_UNAVAILABLE; }
        fi
fi

$SENDMAIL "$@" <in.$$
exit $?

Si vous vous intéressez un peu au sujet vous verrez qu'une grosse partie de ce script se trouve sur quasiment toutes les pages qui parlent d'altermime, je remercie donc son auteur initial.

En ce qui concerne mes ajouts :

  • pour les signatures il suffit de rajouter des fichiers utilisateur_domaine.tld.{txt,html} dans /etc/postfix/altermime/signatures avec dedans ce qui va bien
  • pour les disclaimers génériques, dans /etc/postfix/altermime/disclaimers des fichiers domaine.tld.{txt,html} selon la même philosophie
  • pour l'anti bégaiement (qui se produit rarement mais dans des cas de redirection entre domaines), un simple X-Header

Voilà, je pense que c'est à peu près tout !

lundi 17 octobre 2011

Chacun sa route, chacun son chemin, passe le message à ton voisin ...

En ces temps de restriction budgétaire et de dégraissage du mammouth, chacun se doit d'y aller de son petit effort pour réduire les coût. En ce qui me concerne, cela s'est concrétisé par un peu de tuning sur un serveur de mail postfix/docevot/amavis-et-ses-copains increvable afin de l'utiliser pour plusieurs domaines qui n'ont rien à voir entre eux.

Mon besoin, simple en soit, et, au final, simple à traiter, se résume ainsi :

  • 2 organisations, avec deux domaines (organisation1.fr et organisation2.com)
  • 2 smarthosts (mx.organisation1.fr et mx.organisation2.com)
  • 1 serveur mail pour gérer les deux domaines, mais chacun utilisant en entrée et en sortie son smarthost (relayhost chez postfix) respectif


Je n'insulterai personne en expliquant comment gérer un smarthost (transport.map et relayhost sont nos amis) ou comment rajouter le support d'un domaine ...

Pour ce qui est d'utiliser un smarthost spécifique en sortie, c'est là que la magie de postfix opère : il suffit d'utiliser la directive bien nommée sender_dependent_relayhost_map avec en paramètre un fichier au format "transport", ce qui donne la chose suivante :

@organisation1.fr       [mx.organisation1.fr]
@organisation2.com      [mx.organisation2.com]


Et voilà, comme ça tout le trafic entrant et sortant passe par les smarthosts respectifs des deux organisations.