{"id":1047,"date":"2010-06-16T10:30:27","date_gmt":"2010-06-16T08:30:27","guid":{"rendered":"http:\/\/michauko.org\/blog\/?p=1047"},"modified":"2010-06-16T10:30:27","modified_gmt":"2010-06-16T08:30:27","slug":"utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation","status":"publish","type":"post","link":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/","title":{"rendered":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \u00ab\u00a0vacation\u00a0\u00bb"},"content":{"rendered":"<p>Avec mes pr\u00e9c\u00e9dents articles ci-dessous, vous avez de quoi monter une architecture compl\u00e8te de mails avec utilisateurs virtuels. Pour faire simple.<\/p>\n<ul>\n<li>\n<a href=\"https:\/\/michauko.org\/blog\/2009\/10\/20\/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre\/\">configurer postfix pour g\u00e9rer des utilisateurs virtuels<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/michauko.org\/blog\/2009\/09\/21\/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc\/\">monter une architecture compl\u00e8te \u00ab\u00a0postfix \/ postgrey \/ amavisd-new \/ clamav \/ spamassassin\u00a0\u00bb<\/a>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Il manque cependant un morceau : la possibilit\u00e9 de faire appel \u00e0 des \u00ab\u00a0procmail\u00a0\u00bb personnalis\u00e9s pour ces utilisateurs virtuels.<\/strong><\/p>\n<p>Lorsqu&rsquo;on n&rsquo;est pas avec des utilisateurs virtuels, chaque utilisateur r\u00e9el (ayant un compte utilisateur, donc) utilise g\u00e9n\u00e9ralement son <code>~\/.procmailrc<\/code> pour trier un peu ou <strong>&#8211; cas qui m&rsquo;int\u00e9resse particuli\u00e8rement &#8211; activer son r\u00e9pondeur d&rsquo;absence, \u00ab\u00a0<code>vacation<\/code>\u00ab\u00a0<\/strong> pour ne pas le nommer.<br \/>\nDans le cas d&rsquo;utilisateurs virtuels, c&rsquo;est sensiblement diff\u00e9rent. C&rsquo;est ce que je d\u00e9crirai dans cet article. Ce n&rsquo;est au final pas compliqu\u00e9, mais il faut comprendre le r\u00f4le de chaque composant et les limites de fonctionnement de chaque outil.<br \/>\nEn effet, je n&rsquo;ai pas trouv\u00e9 de doc ultra-claire sur le sujet sur le web, surtout les bricoles de chacun. Avec un peu de recul, et, voyant ma propre solution, j&rsquo;ai l&rsquo;impression qu&rsquo;il y a tellement de configurations possibles (maildrop et pas procmail, mes utilisateurs virtuels comme ci, pas comme \u00e7a, il utilise postfixadmin et pas moi etc) qu&rsquo;il est impossible d&rsquo;\u00e9crire un truc qui n&rsquo;est pas sp\u00e9cifique.<br \/>\nLe plus dur est donc de comprendre ce qu&rsquo;on fait pour transposer \u00e0 sa conf. Je t\u00e2cherai donc, comme d&rsquo;hab, d&rsquo;expliquer ce que je fais plut\u00f4t que de copier-coller les fichiers de conf.<\/p>\n<p>Allez, let&rsquo;s go pour la mise en place sur la base d&rsquo;une archi postfix &#038; co comme d\u00e9crite dans les docs mentionn\u00e9es en d\u00e9but de cet article.<\/p>\n<p><em>Ah, dernier point : \u00e0 la base, et tel que je le d\u00e9cris, l&rsquo;utilisateur ne pourra pas mettre lui m\u00eame son r\u00e9pondeur en place. Dans mon cas, ce n&rsquo;est pas important. En effet, j&rsquo;utilise des utilisateurs virtuels car il s&rsquo;agit d&rsquo;un serveur frontal de mails (qui trie le spam, en gros), livre les messages dans des arborescences virtuelles en attendant d&rsquo;\u00eatre POP\u00e9es depuis un backend de mails quelconque (un vilain Exchange :)). Donc, le r\u00e9pondeur d&rsquo;absence des utilisateurs \u00ab\u00a0physiques\u00a0\u00bb est g\u00e9r\u00e9 par eux-m\u00eames dans Outlook \u00ab\u00a0normalement\u00a0\u00bb, et je n&rsquo;applique ce principe de r\u00e9pondeur qu&rsquo;exceptionnellement, \u00e0 quelques bo\u00eetes mails IMAP g\u00e9n\u00e9riques, qui n&rsquo;ont pas vraiment de notion de \u00ab\u00a0vacances\u00a0\u00bb. Des bo\u00eetes partag\u00e9es entre plusieurs personnes, si vous voulez, mais stock\u00e9es sur le frontal et pas dans le backend, pour diverses raisons dont on se moque ici. Apr\u00e8s vous pourrez toujours bricoler un truc pour que tout un chacun acc\u00e8de \u00e0 son procmail ou son message d&rsquo;asbence pour le mettre, l&rsquo;enlever etc.<\/em><!--more--><\/p>\n<h1>Le principe<\/h1>\n<p>On veut activer le r\u00e9pondeur de toto@domaine.fr en utilisant l&rsquo;outil \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb qui g\u00e8re tr\u00e8s bien les r\u00e9ponses. \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb ne joue qu&rsquo;avec des comptes utilisateurs existants. Premier probl\u00e8me.<\/p>\n<p>Pour y arriver, on va cr\u00e9er des alias pour ce compte virtuel \u00ab\u00a0toto@domaine.fr\u00a0\u00bb afin que postfix \u00ab\u00a0forward\u00a0\u00bb (du nom de la table \u00ab\u00a0forwardings\u00a0\u00bb g\u00e9rant les alias des utilisateurs virtuels) tout mail \u00e0 destination de toto@domaine.fr vers 2 endroits :<\/p>\n<ul>\n<li>\nle r\u00e9el toto@domaine.fr, histoire de d\u00e9livrer le mail quand m\u00eame, au final\n<\/li>\n<li>\net en plus vers un certain toto@vacation.domaine.fr qui n&rsquo;existe pas\n<\/li>\n<\/ul>\n<p><bR>Ce dernier nom \u00ab\u00a0vacation.domaine.fr\u00a0\u00bb n&rsquo;a pas besoin d&rsquo;exister au sens DNS et ne correspond pas non plus \u00e0 un MX r\u00e9el. On va juste cr\u00e9er un \u00ab\u00a0transport\u00a0\u00bb (du nom de la table MySQL qu&rsquo;on a cr\u00e9\u00e9e avec les docs pr\u00e9c\u00e9dentes) particulier afin de router les messages \u00e0 destination du domaine \u00ab\u00a0vacation.domaine.fr\u00a0\u00bb vers un \u00ab\u00a0<code>pipe<\/code>\u00a0\u00bb particulier de postfix qu&rsquo;on va cr\u00e9er pour l&rsquo;occasion.<br \/>\nCe \u00ab\u00a0<code>pipe<\/code>\u00a0\u00bb UNIX, composant qu&rsquo;on ajoute \u00e0 la cha\u00eene postfix, g\u00e8rera en fait l&rsquo;appel \u00e0 <code>procmail <\/code>configur\u00e9 d&rsquo;une mani\u00e8re globale (un gros <code>procmailrc <\/code>g\u00e9n\u00e9rique, si vous voulez).<br \/>\nCe <code>procmail <\/code>fera ensuite un tri sur le nom du destinaire et appellera \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb lorsqu&rsquo;on le veut avec un message personnalis\u00e9.<\/p>\n<p><i>C&rsquo;est ce procmail global qu&rsquo;il conviendrait de d\u00e9couper (avec des INCLUDE), ainsi que les fichiers de messages d&rsquo;absence qui vont avec, si on voulait donner la main d&rsquo;une mani\u00e8re pas super pratique (FTP ? samba ?) \u00e0 des utilisateurs r\u00e9els sur leur r\u00e9pondeur de compte virtuel&#8230;<\/i><\/p>\n<p>Je me suis bas\u00e9 sur pas mal de docs bizarro\u00efdes, et surtout sur les quelques explications <a href=\"http:\/\/lists.mailscanner.info\/pipermail\/mailscanner\/2005-January\/044873.html\">trouv\u00e9es ici<\/a>. Le cheminement y est, mais c&rsquo;est pas d\u00e9taill\u00e9 sur le principe et le type propose son propre script de r\u00e9pondeur ; script qui peut g\u00e9n\u00e9rer une belle boucle infinie entre r\u00e9pondeurs, \u00e0 mon humble avis. Ce risque n&rsquo;existe pas avec \u00ab\u00a0<code>vacation<\/code>\u00ab\u00a0, car il garde une liste des gens \u00ab\u00a0d\u00e9j\u00e0 r\u00e9pondus\u00a0\u00bb, sauf si vous forcez \u00e0 r\u00e9pondre \u00e0 chaque fois.<\/p>\n<h1>Mise en place<\/h1>\n<h2>Paquets, utilisateur etc<\/h2>\n<p>Au besoin, suivant l&rsquo;\u00e9tat de votre installation :<\/p>\n<pre>aptitude install procmail vacation<\/pre>\n<p>Ensuite, j&rsquo;ai expliqu\u00e9 que \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb ne travaillait que sur un compte r\u00e9el. Je lui d\u00e9die donc un compte :<\/p>\n<pre>useradd -m vacation -s \/bin\/nologin -c \"Utilisateur vacation\"<\/pre>\n<h2>Cr\u00e9ation du pipe UNIX<\/h2>\n<p>On cr\u00e9e le processus qui sera en charge de router (de mani\u00e8re interne \u00e0 postfix) les messages arrivant dans un <code>pipe <\/code>qu&rsquo;on nomme \u00ab\u00a0repondeur\u00a0\u00bb vers <code>procmail<\/code> (lui m\u00eame appelant le cas \u00e9ch\u00e9ant le programme de r\u00e9pondeur \u00ab\u00a0<code>vacation<\/code>\u00ab\u00a0).<br \/>\nDans <code>\/etc\/postfix\/master.cf<\/code>, \u00e0 la fin (peu importe), on d\u00e9finit ce pipe comme suit :<\/p>\n<pre>#ajout d'un appel \u00e0 procmail pour g\u00e9rer certains 'vacation' sur les boites IMAP\r\n#attention, l'appel \u00e0 ce pipe est g\u00e9r\u00e9 dans la table des transports virtuels + des forwardings qui vont bien\r\nrepondeur   unix    -       n       n       -       10      pipe\r\n  flags=Rq user=vacation argv=\/usr\/bin\/procmail -Y -m \/etc\/postfix\/procmail-global-repondeur.rc ${sender} ${recipient}\r\n<\/pre>\n<p>Les espaces avant \u00ab\u00a0flags\u00a0\u00bb sont importants, c&rsquo;est ce qui explique \u00e0 postfix qu&rsquo;il s&rsquo;agit d&rsquo;option du <code>pipe <\/code> nomm\u00e9 \u00ab\u00a0repondeur\u00a0\u00bb.<br \/>\nJe d\u00e9crirai le fichier <code>\/etc\/postfix\/procmail-global-repondeur.rc<\/code> plus tard. C&rsquo;est lui qui contiendra les appels aux \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb de tels et tels utilisateurs.<br \/>\nJ&rsquo;avoue ne pas \u00eatre super s\u00fbr des flags utilis\u00e9s, voyez <code>man pipe<\/code> au besoin.<\/p>\n<h2>transport virtuel<\/h2>\n<p>Si votre base MySQL est exactement celle que je d\u00e9cris dans mes pr\u00e9c\u00e9dentes documentations, ins\u00e9rez une ligne dans la table \u00ab\u00a0transport\u00a0\u00bb afin d&rsquo;avoir :<\/p>\n<pre>mysql> select * from transport;\r\n+---------------------+-----------+\r\n| domain              | transport |\r\n+---------------------+-----------+\r\n| vacation.domaine.fr | repondeur |\r\n+---------------------+-----------+\r\n1 row in set (0.00 sec)<\/pre>\n<p>Pour bien relier cette table \u00e0 votre configuration \u00ab\u00a0virtuelle\u00a0\u00bb, la table \u00ab\u00a0transport\u00a0\u00bb dont je parle est celle d\u00e9crite comme \u00e7a dans postfix :<\/p>\n<pre>[extraits de fichiers]\r\nmain.cf:transport_maps = proxy:mysql:\/etc\/postfix\/mysql-virtual_transports.cf\r\nmysql-virtual_transports.cf:query = SELECT transport FROM transport WHERE domain='%s'<\/pre>\n<h2>Cr\u00e9ation des alias pour router vers le \u00ab\u00a0pipe\u00a0\u00bb \u00ab\u00a0repondeur\u00a0\u00bb<\/h2>\n<p>Pour chaque utilisateur virtuel qui devra avoir un r\u00e9pondeur actif (ou potentiellement actif), il faudra ajouter 2 alias le concernant dans la table des alias (\u00ab\u00a0forwardings\u00a0\u00bb dans mon cas, l\u00e0 encore, \u00e7a d\u00e9pend de votre conf de \u00ab\u00a0postfix virtuel\u00a0\u00bb). Ajoutez donc les lignes pour avoir :<\/p>\n<pre>mysql> select * from forwardings where source like 'j%doma%';\r\n+--------------------+-----------------------------+\r\n| source             | destination                 |\r\n+--------------------+-----------------------------+\r\n| jacques@domaine.fr | jacques@domaine.fr          |\r\n| jacques@domaine.fr | jacques@vacation.domaine.fr |\r\n+--------------------+-----------------------------+\r\n2 rows in set (0.00 sec)<\/pre>\n<p>J&rsquo;ai eu un souci pour ins\u00e9rer ces 2 lignes, car il y a une contrainte de clef primaire sur \u00ab\u00a0source\u00a0\u00bb, ce qui semble logique, mais qui est en fait bloquant pour nous et inutile dans un cas normal d&rsquo;alias d&rsquo;utilisateurs virtuels (on pourrait faire une liste de diffusion en cr\u00e9ant plusieurs lignes pour une m\u00eame source car postfix g\u00e8re tr\u00e8s bien le fait d&rsquo;avoir plusieurs destination pour une m\u00eame source).<br \/>\nBref, j&rsquo;ai fait saut\u00e9 la contrainte PK que j&rsquo;avais mise dans mes docs pr\u00e9c\u00e9dents :<\/p>\n<pre>ALTER TABLE forwardings\r\nDROP PRIMARY KEY;<\/pre>\n<p>Rassurez-vous, \u00e7a ne fait pas sauter les entr\u00e9es d\u00e9j\u00e0 stock\u00e9es dans la table si vous en avez.<\/p>\n<h2>procmailrc et vacation<\/h2>\n<p>On y est presque.<br \/>\nReste \u00e0 d\u00e9finir le <code>procmail <\/code>global appelant vacation :<br \/>\nDans mon \u00ab\u00a0<code>pipe<\/code>\u00ab\u00a0, j&rsquo;appelle ce fichier :<\/p>\n<pre>servr:\/etc\/postfix# cat \/etc\/postfix\/procmail-global-repondeur.rc\r\nSHELL=\/bin\/sh\r\n\r\n:0c\r\n* ^(To|Cc).*jacques@domaine.fr\r\n| vacation -f \/home\/vacation\/jacques@domaine.fr.db -m \/home\/vacation\/jacques@domaine.fr.msg -a jacques@domaine.fr vacation\r\n\r\n:0c\r\n* ^(To|Cc).*autre_type@domaine.fr\r\n| vacation -f \/home\/vacation\/autre_type@domaine.fr.db -m \/home\/vacation\/autre_type@domaine.fr.msg -a autre_type@domaine.fr vacation\r\n\r\n:0\r\n\/dev\/null<\/pre>\n<p><strong>Alors, c&rsquo;est presque le plus compliqu\u00e9 car ce fichier est plein de petites ruses<\/strong>. Il vous montre comment proc\u00e9der lorsque vous aurez plusieurs bo\u00eetes concern\u00e9es par un vacation.<br \/>\n<i>Je rappelle que de cette mani\u00e8re, c&rsquo;est un peu p\u00e9nible \u00e0 maintenir car c&rsquo;est l&rsquo;admin qui g\u00e8re. L\u00e0 il s&rsquo;agit de bo\u00eete IMAP partag\u00e9es et peu nombreuses, donc c&rsquo;est g\u00e9rable.<\/i><\/p>\n<p>Le d\u00e9tail est donc :<\/p>\n<ul>\n<li>\nJe stocke tous mes messages de \u00ab\u00a0vacances\u00a0\u00bb dans ~vacation\/\n<\/li>\n<li>\n-f : pour indiquer dans quelle \u00ab\u00a0base de donn\u00e9es\u00a0\u00bb on stocke les gens \u00e0 qui on a d\u00e9j\u00e0 r\u00e9pondu<\/li>\n<li>\n<\/li>\n<li>\n-m : pour indiquer le mail de r\u00e9ponse d&rsquo;un utilisateur donn\u00e9, je le d\u00e9taille plus bas\n<\/li>\n<li>\n-a : <strong>hyper important <\/strong> : en effet, <code>vacation <\/code>ne travaille que sur un utilisateur r\u00e9el. Donc oblig\u00e9 de sp\u00e9cifier un utilisateur r\u00e9el en fin de commande <code>vacation<\/code>, c&rsquo;est l&rsquo;utilisateur \u00ab\u00a0vacation\u00a0\u00bb himself qui figure en dernier argument de la ligne de commande. Donc, pour que <code>vacation <\/code> travaille, j&rsquo;explique aussi que cet utilisateur r\u00e9el peut \u00eatre connu sous l&rsquo;alias (-a) jacques@domaine.fr (ou autre_type@domaine.fr dans la 2\u00e8 r\u00e8gle). Sinon aucune r\u00e8gle ne s&rsquo;appliquera jamais.\n<\/li>\n<li>\n\u00ab\u00a0:0c\u00a0\u00bb : <strong>OUI : il faut activer le \u00ab\u00a0carbon copy\u00a0\u00bb<\/strong>. J&rsquo;ai constat\u00e9 \u00e7a \u00e0 force de tests. En effet, un message arrivant dans postfix a un ID, il est d\u00e9doubl\u00e9 avec le m\u00eame ID, l&rsquo;un part vers l&rsquo;utilisateur r\u00e9el pour livraison, l&rsquo;autre vers le \u00ab\u00a0<code>pipe<\/code>\u00ab\u00a0, puis <code>procmail<\/code>, puis <code>vacation<\/code>. \u00ab\u00a0<code>vacation<\/code>\u00a0\u00bb arr\u00eate les r\u00e8gles (si on ne met pas le \u00ab\u00a0c\u00a0\u00bb de carbon copy) d\u00e8s que \u00e7a \u00ab\u00a0match\u00a0\u00bb. Si un exp\u00e9diteur envoi un unique mail \u00e0 en m\u00eame temps jacques@domaine.fr et autre_type@domaine.fr, la premi\u00e8re r\u00e8gle va marcher, donc procmail arr\u00eatera de bosser. R\u00e9sultat : pas de r\u00e9pondeur pour \u00ab\u00a0autre_type\u00a0\u00bb. On ne sait pas qu&rsquo;il est en vacances.\n<\/li>\n<li>\nEt enfin, le pi\u00e8ge des \u00ab\u00a0carbon copy\u00a0\u00bb : si on ne fait pas une derni\u00e8re r\u00e8gle virant vers \/dev\/null tout message au final, un message l\u00e9gitime auquel on aura r\u00e9pondu par \u00ab\u00a0vacation\u00a0\u00bb sortira de procmail et continuera sa route : il sera donc livr\u00e9. Mais c&rsquo;est un utilisateur compl\u00e8tement bidon, untel@vacation.domaine.fr, domaine inexistant => erreur de livraison => log dans <code>\/var\/log\/mail.info<\/code> et <strong>surtout<\/strong>, mail d&rsquo;erreur bien crade informant l&rsquo;exp\u00e9diteur&#8230;<\/li>\n<\/ul>\n<h2>fichier .msg de vacation<\/h2>\n<p>Voici \u00e0 quoi doit ressembler un fichier de r\u00e9ponse minimaliste :<\/p>\n<pre>servr:\/etc\/postfix# cat ~vacation\/jacques\\@domaine.fr.msg\r\nFrom: jacques@domaine.fr (Jacques)\r\nSubject: Re: $SUBJECT\r\nPrecedence: Bulk\r\n\r\nVotre mail a bien \u00e9t\u00e9 re\u00e7u, blablablabla\r\n-- Jacques\r\n<\/pre>\n<h2>reload postfix et tests<\/h2>\n<p>A la fin, <code>\/etc\/init.d\/postfix reload<\/code> et zou, testez des envois de mails, de r\u00e9envois de mails (pour n&rsquo;avoir qu&rsquo;une fois la r\u00e9ponse etc).<br \/>\nLe plus risqu\u00e9 dans cette manip&rsquo; sur un serveur en production, c&rsquo;est que tout les adresses normales commencent \u00e0 merdouiller. Le plus rapide pour annuler tout \u00e7a le temps de r\u00e9fl\u00e9chir, est de commenter les 2 lignes d\u00e9finissant le pipe et de rechargez postfix.<\/p>\n<h1>Autres remarques<\/h1>\n<h2>R\u00e9init d&rsquo;un r\u00e9pondeur<\/h2>\n<p>A une \u00e9poque, il me semblait qu&rsquo;en modifiant le fichier .msg, <code>vacation <\/code>d\u00e9tectait le changement et donc ne tenait plus compte des exp\u00e9diteurs \u00ab\u00a0d\u00e9j\u00e0 r\u00e9pondus\u00a0\u00bb. Apr\u00e8s quelques tests, je n&rsquo;en suis plus si s\u00fbr. Le plus simple pour relancer un r\u00e9pondeur \u00ab\u00a0pour tous\u00a0\u00bb : supprimez le fichier .db correspondant.<\/p>\n<h2>Permissions<\/h2>\n<p>Attention, j&rsquo;ai interdit le login pour l&rsquo;utilisateur vacation. Donc tout ce que vous cr\u00e9erez dans ~vacation\/*msg sera s\u00fbrement au nom de \u00ab\u00a0root\u00a0\u00bb, par exemple. Pensez \u00e0 changer les droits.<br \/>\nSi vous avez rat\u00e9 un truc, les logs sont tr\u00e8s explicites dans <code>\/var\/log\/mail.info<\/code>.<br \/>\nJe crois aussi me rappeler que si <code>vacation <\/code>ne voit pas le fichier .msg, il ne fera rien. A v\u00e9rifier, mais c&rsquo;est une m\u00e9thode simple (et crade car \u00e7a va faire du log \u00e0 coup s\u00fbr) pour activer\/d\u00e9sactiver un r\u00e9pondeur \ud83d\ude42<\/p>\n<h2>un log complet pour illustrer<\/h2>\n<p>Si tout se passe bien, vous avez \u00e7a :<br \/>\nConnexion du serveur exp\u00e9diteur :<\/p>\n<pre>Jun 14 17:10:21 servr postfix\/smtpd[20107]: connect from expediteur.org[xx.yy.zz.tt]\r\nJun 14 17:10:21 servr postgrey[12166]: action=pass, reason=client AWL, client_name=expediteur.org, client_address=xx.yy.zz.tt, sender=exped@expediteur.org, recipient=jacques@domaine.fr\r\nJun 14 17:10:21 servr postfix\/smtpd[20107]: C2B829C4081: client=expediteur.org[xx.yy.zz.tt]\r\nJun 14 17:10:21 servr postfix\/cleanup[20065]: C2B829C4081: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>\r\nJun 14 17:10:21 servr postfix\/qmgr[19547]: C2B829C4081: from=<exped@expediteur.org>, size=515, nrcpt=2 (queue active)\r\nJun 14 17:10:21 servr postfix\/smtpd[20107]: disconnect from expediteur.org[xx.yy.zz.tt]\r\nJun 14 17:10:23 servr postfix\/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]\r\nJun 14 17:10:23 servr postfix\/smtpd[20208]: 8A0E69C4085: client=localhost.localdomain[127.0.0.1]\r\nJun 14 17:10:23 servr postfix\/cleanup[20065]: 8A0E69C4085: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>\r\nJun 14 17:10:23 servr postfix\/smtpd[20208]: disconnect from localhost.localdomain[127.0.0.1]\r\nJun 14 17:10:23 servr postfix\/qmgr[19547]: 8A0E69C4085: from=<exped@expediteur.org>, size=1045, nrcpt=3 (queue active)<\/pre>\n<p>Pas de greylisting, car c&rsquo;est un pote. Analyse par amavis OK, on d\u00e9double le message vers jacques@domaine.fr et jacques@vacation.domaine.fr.<br \/>\nChaque file suivra alors sa route :<\/p>\n<pre>Jun 14 17:10:23 servr amavis[18918]: (18918-18) Passed CLEAN, [xx.yy.zz.tt] [xx.yy.zz.tt] <exped@expediteur.org> -> <jacques@domaine.fr>,<jacques@vacation.domaine.fr>, Message-ID: <20100614151021.AF0F0EEC57C@mail.expediteur.org>, mail_id: uuW4XqNAoH7S, Hits: 1.714, size: 515, queued_as: 8A0E69C4085, 1902 ms\r\nJun 14 17:10:23 servr postfix\/smtp[20190]: C2B829C4081: to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03\/0\/0\/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)\r\nJun 14 17:10:23 servr postfix\/smtp[20190]: C2B829C4081: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03\/0\/0\/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)\r\nJun 14 17:10:23 servr postfix\/qmgr[19547]: C2B829C4081: removed<\/pre>\n<p>La partie \u00ab\u00a0utilisateur virtuel de postfix\u00a0\u00bb traite le \u00ab\u00a0mail normal\u00a0\u00bb => \u00ab\u00a0delivered to maildir\u00a0\u00bb. Ca roule :<\/p>\n<pre>Jun 14 17:10:23 servr postfix\/virtual[20212]: 8A0E69C4085: to=<jacques@domaine.fr>, relay=virtual, delay=0.3, delays=0.15\/0.01\/0\/0.14, dsn=2.0.0, status=sent (delivered to maildir)<\/pre>\n<p>La partie \u00ab\u00a0vacation\u00a0\u00bb (pipe repondeur) route vers le \u00ab\u00a0relay=repondeur\u00a0\u00bb. Le job s&rsquo;accomplit correctement \u00ab\u00a0(delivered via repondeur service)\u00a0\u00bb. L\u00e0 on n&rsquo;a pas d&rsquo;autre erreur, sinon on pourrait voir vacation ou procmail pas content :<\/p>\n<pre>Jun 14 17:10:23 servr postfix\/pickup[19550]: ECF179C408A: uid=5001 from=<vacation>\r\nJun 14 17:10:23 servr postfix\/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=repondeur, delay=0.41, delays=0.15\/0\/0\/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)\r\nJun 14 17:10:23 servr postfix\/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, relay=repondeur, delay=0.41, delays=0.15\/0\/0\/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)\r\nJun 14 17:10:23 servr postfix\/cleanup[20065]: ECF179C408A: message-id=<20100614151023.ECF179C408A@domaine.fr>\r\nJun 14 17:10:23 servr postfix\/qmgr[19547]: 8A0E69C4085: removed\r\nJun 14 17:10:24 servr postfix\/qmgr[19547]: ECF179C408A: from=<vacation@domaine.fr>, size=343, nrcpt=1 (queue active)<\/pre>\n<p>Deux secondes plus tard, \u00ab\u00a0vacation\u00a0\u00bb a d\u00e9tect\u00e9 qu&rsquo;il fallait r\u00e9pondre \u00e0 \u00ab\u00a0exped@expediteur.org\u00a0\u00bb, donc on envoit un mail :<br \/>\n(le champ From sera jacques@domaine.fr, seul Return-Path sera \u00e0 vacation@domaine.fr)<\/p>\n<pre>Jun 14 17:10:26 servr postfix\/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]\r\nJun 14 17:10:26 servr postfix\/smtpd[20208]: 174A99C4081: client=localhost.localdomain[127.0.0.1]\r\nJun 14 17:10:26 servr postfix\/cleanup[20065]: 174A99C4081: message-id=<20100614151023.ECF179C408A@domaine.fr>\r\nJun 14 17:10:26 servr postfix\/qmgr[19547]: 174A99C4081: from=<vacation@domaine.fr>, size=770, nrcpt=1 (queue active)\r\nJun 14 17:10:26 servr amavis[20202]: (20202-01) Passed CLEAN, <vacation@domaine.fr> -> <exped@expediteur.org>, Message-ID: <20100614151023.ECF179C408A@domaine.fr>, mail_id: xw6dpgfdz+b5, Hits: -0.001, size: 343, queued_as: 174A99C4081, 2197 ms\r\nJun 14 17:10:26 servr postfix\/smtp[20190]: ECF179C408A: to=<exped@expediteur.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.3, delays=0.14\/0\/0\/2.2, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=20202-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 174A99C4081)\r\nJun 14 17:10:26 servr postfix\/qmgr[19547]: ECF179C408A: removed\r\nJun 14 17:10:26 servr postfix\/smtp[20219]: 174A99C4081: to=<exped@expediteur.org>, relay=mail.expediteur.org[xx.yy.zz.tt]:25, delay=0.21, delays=0.14\/0\/0.02\/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 4337FEEC560)\r\nJun 14 17:10:26 servr postfix\/qmgr[19547]: 174A99C4081: removed<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Avec mes pr\u00e9c\u00e9dents articles ci-dessous, vous avez de quoi monter une architecture compl\u00e8te de mails avec utilisateurs virtuels. Pour faire simple. configurer postfix pour g\u00e9rer des utilisateurs virtuels monter une architecture compl\u00e8te \u00ab\u00a0postfix \/ postgrey &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2,385,82],"tags":[436,437,118,153,142],"class_list":["post-1047","post","type-post","status-publish","format-standard","hentry","category-debian","category-mails","category-pl","tag-master-cf","tag-pipe","tag-postfix","tag-procmail","tag-vacation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>utilisateurs postfix virtuels : ajouter un r\u00e9pondeur &quot;vacation&quot; - Le blog de Michauko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur &quot;vacation&quot; - Le blog de Michauko\" \/>\n<meta property=\"og:description\" content=\"Avec mes pr\u00e9c\u00e9dents articles ci-dessous, vous avez de quoi monter une architecture compl\u00e8te de mails avec utilisateurs virtuels. Pour faire simple. configurer postfix pour g\u00e9rer des utilisateurs virtuels monter une architecture compl\u00e8te \u00ab\u00a0postfix \/ postgrey &hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/\" \/>\n<meta property=\"og:site_name\" content=\"Le blog de Michauko\" \/>\n<meta property=\"article:published_time\" content=\"2010-06-16T08:30:27+00:00\" \/>\n<meta name=\"author\" content=\"michauko\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"michauko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/\"},\"author\":{\"name\":\"michauko\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/#\\\/schema\\\/person\\\/0cd9f3d9ce4dccc05df81a5b27051ea9\"},\"headline\":\"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \u00ab\u00a0vacation\u00a0\u00bb\",\"datePublished\":\"2010-06-16T08:30:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/\"},\"wordCount\":2032,\"commentCount\":5,\"keywords\":[\"master.cf\",\"pipe\",\"postfix\",\"procmail\",\"vacation\"],\"articleSection\":[\"Debian\",\"mails\",\"planet-libre.org\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/\",\"url\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/\",\"name\":\"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \\\"vacation\\\" - Le blog de Michauko\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/#website\"},\"datePublished\":\"2010-06-16T08:30:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/#\\\/schema\\\/person\\\/0cd9f3d9ce4dccc05df81a5b27051ea9\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/michauko.org\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \u00ab\u00a0vacation\u00a0\u00bb\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/michauko.org\\\/blog\\\/\",\"name\":\"Le blog de Michauko\",\"description\":\"Si tu ne comprends pas le titre de l&#039;article, passe ton chemin\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/michauko.org\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/michauko.org\\\/blog\\\/#\\\/schema\\\/person\\\/0cd9f3d9ce4dccc05df81a5b27051ea9\",\"name\":\"michauko\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g\",\"caption\":\"michauko\"},\"sameAs\":[\"http:\\\/\\\/michauko.org\\\/\"],\"url\":\"https:\\\/\\\/michauko.org\\\/blog\\\/author\\\/randomized2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \"vacation\" - Le blog de Michauko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/","og_locale":"fr_FR","og_type":"article","og_title":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \"vacation\" - Le blog de Michauko","og_description":"Avec mes pr\u00e9c\u00e9dents articles ci-dessous, vous avez de quoi monter une architecture compl\u00e8te de mails avec utilisateurs virtuels. Pour faire simple. configurer postfix pour g\u00e9rer des utilisateurs virtuels monter une architecture compl\u00e8te \u00ab\u00a0postfix \/ postgrey &hellip;","og_url":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/","og_site_name":"Le blog de Michauko","article_published_time":"2010-06-16T08:30:27+00:00","author":"michauko","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"michauko","Dur\u00e9e de lecture estim\u00e9e":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/#article","isPartOf":{"@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/"},"author":{"name":"michauko","@id":"https:\/\/michauko.org\/blog\/#\/schema\/person\/0cd9f3d9ce4dccc05df81a5b27051ea9"},"headline":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \u00ab\u00a0vacation\u00a0\u00bb","datePublished":"2010-06-16T08:30:27+00:00","mainEntityOfPage":{"@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/"},"wordCount":2032,"commentCount":5,"keywords":["master.cf","pipe","postfix","procmail","vacation"],"articleSection":["Debian","mails","planet-libre.org"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/","url":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/","name":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \"vacation\" - Le blog de Michauko","isPartOf":{"@id":"https:\/\/michauko.org\/blog\/#website"},"datePublished":"2010-06-16T08:30:27+00:00","author":{"@id":"https:\/\/michauko.org\/blog\/#\/schema\/person\/0cd9f3d9ce4dccc05df81a5b27051ea9"},"breadcrumb":{"@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/michauko.org\/blog\/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation-1047\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/michauko.org\/blog\/"},{"@type":"ListItem","position":2,"name":"utilisateurs postfix virtuels : ajouter un r\u00e9pondeur \u00ab\u00a0vacation\u00a0\u00bb"}]},{"@type":"WebSite","@id":"https:\/\/michauko.org\/blog\/#website","url":"https:\/\/michauko.org\/blog\/","name":"Le blog de Michauko","description":"Si tu ne comprends pas le titre de l&#039;article, passe ton chemin","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/michauko.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/michauko.org\/blog\/#\/schema\/person\/0cd9f3d9ce4dccc05df81a5b27051ea9","name":"michauko","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c3a8969c185fd0eef3893a15408f3ef1b36a6681a066b1eb32045643c30ba65?s=96&d=mm&r=g","caption":"michauko"},"sameAs":["http:\/\/michauko.org\/"],"url":"https:\/\/michauko.org\/blog\/author\/randomized2\/"}]}},"_links":{"self":[{"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/posts\/1047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/comments?post=1047"}],"version-history":[{"count":33,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/posts\/1047\/revisions"}],"predecessor-version":[{"id":1080,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/posts\/1047\/revisions\/1080"}],"wp:attachment":[{"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/media?parent=1047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/categories?post=1047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michauko.org\/blog\/wp-json\/wp\/v2\/tags?post=1047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}