apt-get install gnarwl adduser --system --home /var/lib/gnarwl --no-create-home --gid 8 gnarwl chown gnarwl: -R /var/lib/gnarwl /etc/gnarwl.cfg
Fichier /etc/postfix/master.cf :
# Gnarwl gnarwl unix - n n - 1 pipe flags=F user=gnarwl argv=/usr/bin/gnarwl -c /etc/gnarwl.cfg -a ${nexthop}
Fichier /etc/gnarwl.cfg :
map_sender $sender map_receiver $recepient map_subject $subject map_field $begin vacationStart map_field $end vacationEnd map_field $fullname cn map_field $deputy vacationForward server ldap.example.com port 389 scope sub login uid=gnarwl,ou=sysaccounts,o=example password mdpldap protocol 0 base o=example queryfilter (&(|(mail=$recepient)(mailAlternateAddress=$recepient))(vacationActive=TRUE)) result vacationInfo blockfiles /var/lib/gnarwl/block/ umask 0644 blockexpire 48 mta /usr/sbin/sendmail -F $recepient -t $sender maxreceivers 64 maxheader 512 charset UTF-8 badheaders /var/lib/gnarwl/badheaders.db blacklist /var/lib/gnarwl/blacklist.db forceheader /var/lib/gnarwl/header.txt forcefooter /var/lib/gnarwl/footer.txt recvheader To Cc loglevel 2
Fichier /var/lib/gnarwl/header.txt :
From: $fullname <$recepient> To: $sender X-mailer: GNARWL MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: $subject
Il suffira ensuite d'envoyer le mail automatiquement sur le transport gnarwl:. Différente solutions existent pour cela :
Le principe : Utiliser un mapping LDAP pour ajouter automatiquement une adresse mail destinatrice en BCC via la directive recipient_bcc_maps. L'adresse mail ajouté sera dans un domaine spécial dont les mails seront destinés au transport gnarwl:
Fichier /etc/postfix/main.cf :
transport_maps = proxy:ldap:gnarwl_transport ldap_mailbox_vacation_bcc_server_host = ldap0.example.com,ldap1.example.com ldap_mailbox_vacation_bcc_server_port = 389 ldap_mailbox_vacation_bcc_search_base = o=example ldap_mailbox_vacation_bcc_timeout = 30 ldap_mailbox_vacation_bcc_query_filter = (&(|(mail=%s)(mailAlternateAddress=%s))(vacationActive=TRUE)) ldap_mailbox_vacation_bcc_result_attribute = uid ldap_mailbox_vacation_bcc_result_format = %s@autoreponse.example.com ldap_mailbox_vacation_bcc_expansion_limit = 1 ldap_mailbox_vacation_bcc_scope = sub ldap_mailbox_vacation_bcc_bind = yes ldap_mailbox_vacation_bcc_version = 3 ldap_mailbox_vacation_bcc_bind_dn = uid=postfix,ou=sysaccounts,o=example ldap_mailbox_vacation_bcc_bind_pw = mdpldap recipient_bcc_maps = ldap:ldap_mailbox_vacation_bcc gnarwl_transport_server_host = ldap0.example.com,ldap1.example.com gnarwl_transport_server_port = 389 gnarwl_transport_search_base = o=example gnarwl_transport_domain = autoreponse.example.com gnarwl_transport_query_filter = (&(vacationActive=TRUE)(uid=%u)) gnarwl_transport_result_attribute = mail gnarwl_transport_result_format = gnarwl:%s gnarwl_transport_expansion_limit = 1 gnarwl_transport_scope = sub gnarwl_transport_bind = yes gnarwl_transport_version = 3 gnarwl_transport_cache = no gnarwl_transport_bind_dn = uid=postfix,ou=sysaccounts,o=example gnarwl_transport_bind_pw = mdpldap
Le principe est de repasser la valeur de l'attribut vacationActive à FALSE lorsque la date dans l'attribut vacationEnd est dépassée. Cela n'est dans l'absolu pas forcément nécessaire car gnarwl vérifie également que la date d'expiration n'est pas dépassée avant d'envoyer le mail. En outre, cela permet :
Le script est téléchargeable ici. Il utilise en dépendance la librairie mylib installable de la manière suivante :
apt-get install git python-ldap cd /usr/local/src git clone http://git.zionetrix.net/git/python-mylib
Ce script doit idéalement être installé dans /usr/local/sbin et être exécuté par cron au moins une fois par jour.