# Exécuter un script sieve sur une condition

**URL:** <https://www.debian-fr.org/t/executer-un-script-sieve-sur-une-condition/84239>\
**Category:** Support Debian\
**Created:** [Mars 15, 2021, 5:20 UTC](https://www.debian-fr.org/t/executer-un-script-sieve-sur-une-condition/84239 "2021-03-15T17:20:55Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Mars 15, 2021, 5:20 UTC](https://www.debian-fr.org/t/executer-un-script-sieve-sur-une-condition/84239/1 "2021-03-15T17:20:55Z")

</div>

Hello,

Dans mon serveur de mail, je dois faire un routage automatique des mails reçus sur des boîte dites de fonctions, vers les bal perso de mes utilisateurs.

L’idée de cette feature est de laisser à l’utilisateur dans l’assoc, le choix, si il ne veut pas consulter sa bal de fonction (une bal de l’assoc lui étant créée en rapport à sa fonction), d’au moins recevoir les mails sur sa boîte personnelle (orange, free, etc..).

J’ai donc un script qui va parcourir les choix des users, et si actif ou non, recréé à la volée un /var/mail/vhost/%d/%u/automate.sieve dans lequel je mets ceci :

> require [«&nbsp;fileinto&nbsp;», «&nbsp;mailbox&nbsp;», «&nbsp;copy&nbsp;»];  
> if header :contains «&nbsp;To&nbsp;» «&nbsp;mail\_pro&nbsp;» { redirect :copy «&nbsp;mail\_perso&nbsp;»; }

ça marche du feu de dieu, mais un peu trop bien..

Maintenant, admettons que mon user reçoive des pourriels du fin fond de l’enfer, c’est à dire que ceux-ci ont traversé les RBL, postscreen, les filtres postfix, et Rspamd. Boom ça arrive dans sa boîte et là, que se passe-t-il ? Il arrose à son tour sa boîte perso free, orange ou je sais quoi d’autre.. et on se retrouve malgré nous à émettre du spam. Un coup à finir dans les dnsbl.

Je voudrais donc éviter ce phénomène, mais j’avoue ne pas savoir comment faire.

Ma conf dovecot ressemble à ceci :  
cat /etc/dovecot/conf.d/90-sieve.conf

> plugin {
> 
> sieve\_global\_dir = /etc/dovecot/sieve-global/
> 
> sieve = file:~/sieve;active=~/.dovecot.sieve  
> sieve\_before = /etc/dovecot/sieve-global  
> **sieve\_before1 = /var/mail/vhost/%d/%u/automate.sieve**
> 
> sieve\_plugins = sieve\_imapsieve sieve\_extprograms
> 
> imapsieve\_mailbox1\_name = Junk  
> imapsieve\_mailbox1\_causes = COPY  
> imapsieve\_mailbox1\_before = file:/etc/dovecot/sieve/report-spam.sieve
> 
> imapsieve\_mailbox2\_name = \*  
> imapsieve\_mailbox2\_from = Junk  
> imapsieve\_mailbox2\_causes = COPY  
> imapsieve\_mailbox2\_before = file:/etc/dovecot/sieve/report-ham.sieve
> 
> sieve\_pipe\_bin\_dir = /etc/dovecot/sieve
> 
> sieve\_global\_extensions = +vnd.dovecot.pipe  
> }

L’idée serait de dire que si je dois exécuter **/etc/dovecot/sieve/report-spam.sieve** (car un spam a été détecté), alors je n’exécute pas **/var/mail/vhost/%d/%u/automate.sieve**

Une idée ?

---

<div class="post-metadata">

**Author:** ![jhfra](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@jhfra](https://www.debian-fr.org/u/jhfra)\
**Post date:** [Mars 16, 2021, 10:48 UTC](https://www.debian-fr.org/t/executer-un-script-sieve-sur-une-condition/84239/2 "2021-03-16T10:48:10Z")

</div>

Réponse de moi à moi, plutôt que d’exécuter plusieurs scripts, autant imbriquer la condition directement dans le script sieve :

```
require ["fileinto", "mailbox", "copy"];

if header :contains "X-Spam" "Yes" {
        stop;
}

elsif header :contains "To" "test@domaine1.net" {
        redirect :copy "titi@domaine2.net";
}
```
