ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


blog:2013:09:03:dovecot_et_sieve

Dovecot et Sieve

Sieve permet de créer des règles de filtrage des e-mail reçus.
ManageSieve permet a l'utilisateur de gérer ses propres règles.

~~READMORE~~

Dovecot

Dovecot doit être opérationnelle et livrer les mails via Dovecot-LDA ou Dovecot-LMTP .

Sieve

Installation

# aptitude install dovecot-sieve
...
Creating config file /etc/dovecot/conf.d/90-sieve.conf with new version
...

Configuration

Le fichier 90-sieve.conf contient :

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}

On change (un peu) cette configuration de base, et on la compléte dans local.conf (ma conf pour Dovecot) :

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve.d
  
  sieve_before = ~/.dovecot_before.sieve
  
  sieve_max_script_size = 2M
  sieve_quota_max_scripts = 30
  sieve_quota_max_storage = 300M
}

sieve_before” , parce que lorsqu'on installera “ManageSieve , ce qu'on aurait pondu dans le fichier ~/.dovecot.sieve sera simplement écrasé !

Pour finir cette installation, on ajoute le plugin “sieve” dans la section protocol lmtp pour avoir:

mail_plugins = $mail_plugins sieve

Eventuellement, on peut aussi ajouter:

lda_mailbox_autocreate = yes

Ainsi, les “sous-répertoires” seront automatiquement créés par Sieve, lorsque nécessaire.

Exemples

A ajouter dans le fichier ”.dovecot_before.sieve“ d'un utilisateur.

SPAM

Si le sujet commence par ”[SPAM]“ , marquer comme lu et déplacer dans le dossier ”Junk“ :

require ["regex","fileinto","imap4flags"];

if anyof (header :regex "Subject" "^[[]SPAM[]]")
{
  # Marque "lu"
  setflag "\\Seen";
  # Deplace dans "Junk"
  fileinto "Junk";
  # N'execute pas d'autres règles
  stop;
}
  • anyof( a , b , c ) : équivalent de “a” ou “b” ou “c”
  • allof( a , b , c ) : équivalent de “a” et “b” et “c”

NOTA: Evidement, dans l'exemple, le ”anyof()“ est superflu. :-)

Automatiquement, la première fois, ce scripte sera compilé avant d'être exécuté. On peut forcer la compilation maintenant, mais attention a bien donner les droits d'écriture pour l'utilisateur.

# sievec .dovecot_before.sieve

(Tout va bien: un fichier ”.dovecot_before.svbin“ est apparu)

# chown <USER>: .dovecot_before.svbin

(Parce qu'en cas de modification, la re-compilation se fera dans le contexte de ”<USER>“)

vacation

require ["vacation"];
# ^^^ a ajouter a la première ligne "require"

if anyof (true) 
{
  vacation
           :days 1
           :addresses ["<USER>@tjaouen.fr"]
           :subject "[Vacation] Je suis en vacances !"
           text:
Bonjour,

*** Ceci est un message automatique ***

J'ai bien reçu votre message, mais je crains de ne pouvoir y répondre
avant le 27 octobre 2013.

Cordialement
Thierry Jaouen

-- 
Ni dieu ni maître, juste une chaine au cou.
.
;
}

Note:

  • :days 1“ pour faire des tests, il faudrait mettre ”:days 0“ et aussi dans la conf du plugin ”sieve_vacation_min_period = 0
  • :addresses …“ parce que ça ne fonctionne pas sans… Je cherche encore pourquoi :-( (voir aussi: ”sieve_vacation_dont_check_recipient = yes

Pour désactiver ce script, il suffit de remplacer ”anyof (true)“ par ”anyof (false)

ManageSieve

Son protocole est proche de celui d'IMAP .

On va l'installer avec le support SSL, parce que c'est bien.

Installation

# aptitude install dovecot-managesieved
...
Creating config file /etc/dovecot/conf.d/20-managesieve.conf with new version
...

Le fichier installé est totalement commenté.

Configurer

SSL

# cd /etc/dovecot
# cd private
# openssl genrsa 2048 > ssl-managesieve-tjaouen-fr.key
# chmod 0600 ssl-managesieve-tjaouen-fr.key
# cd ..
# openssl req -new -key private/ssl-managesieve-tjaouen-fr.key -x509 -days 3650 -out ssl-managesieve-tjaouen-fr.pem

… qu'on peut alimenter ainsi:

Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]: France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Eez.fr Corp.
Organizational Unit Name (eg, section) []:ManageSieve
Common Name (e.g. server FQDN or YOUR name) []:managesieve.tjaouen.fr
Email Address []:NOSPAMpostmaster_at_tjaouen.fr

On a maintenant 2 fichiers:

ssl-managesieve-tjaouen-fr.pem
private/ssl-managesieve-tjaouen-fr.key

Configuration

Dans la conf de Dovecot, soit local.conf :

service managesieve-login {

  inet_listener sieve {
    port = 4190
  }

  #process_min_avail = 5
}

protocol sieve {

  # Pour debug de sieve
  #mail_debug = yes

  # "protocol managesieve"
  ssl_cert = </etc/dovecot/ssl-managesieve-tjaouen-fr.pem
  ssl_key = </etc/dovecot/private/ssl-managesieve-tjaouen-fr.key
  
  # FIXME: ça marche ou pas ?
  ssl = required                    # force STARTTLS
  disable_plaintext_auth = yes      # idem
}

Exemples

Thunderbird

Un module sieve existe, et permet, donc, de composer ces scripts et de les activer (1 seul a la fois) à distance.

Autres

FIXME

Roundcube et Sieve

Un plugin Sieve intégré dans le webmail Roundcube donne le pouvoir à n'importe quel utilisateur de créer des règles simples (dont la “vacation” ) .

En supposant que Roundcube est déjà installé .

# aptitude install roundcube-plugins-extra

Configurer le plugin:
Une conf par defaut est déjà en forme là: /usr/share/roundcube/plugins/sieverules/config.inc.php.dist

# cp /usr/share/roundcube/plugins/sieverules/config.inc.php.dist /etc/roundcube/plugins/sieverules/config.inc.php

Dans le fichier /etc/roundcube/plugins/sieverules/config.inc.php , voici mes changements:

$rcmail_config['sieverules_host'] = 'mail.local.eez.fr';
$rcmail_config['sieverules_port'] = 4190;
#$rcmail_config['sieverules_usetls'] = true;

Le usetls n'est pas indispensable dans un reseau local ;-)

Puis ajouter le plugin dans la conf de chaque webmail , exemple:

$rcmail_config['plugins'] = array('sieverules');

On peut alors créer différents filtres. Pour information, on voit que ces filtres sont écrit dans :

.dovecot.sieve -> sieve.d/roundcube.sieve

Sources

blog/2013/09/03/dovecot_et_sieve.txt · Dernière modification: 2013/09/08 21:34 par thierry