Page d’accueil Proton

Filtre Sieve (filtres personnalisés avancés)

Lecture
41 minutes
Catégorie
Recevoir et lire des messages

Proton Mail propose aux utilisateurs différents moyens de filtrer automatiquement les e-mails en leur attribuant des étiquettes ou en les classant dans des dossiers. En général, il existe trois méthodes :

  1. L’ajout d’expéditeurs à la liste d’adresses bloquées et à la liste d’adresses autorisées de sorte qu’ils soient toujours ou ne soient jamais placés dans le dossier des indésirables/spam ;
  2. La création d’un filtre personnalisé à l’aide de l’interface interactive de Proton Mail ;
  3. [Le plus avancé] La création d’un filtre personnalisé en Sieve.

Parmi ces méthodes, la création d’un filtre personnalisé en Sieve offre la plus grande polyvalence, mais elle est également plus complexe à utiliser. Pour cette raison, nous considérons Sieve comme une fonctionnalité avancée destinée aux utilisateurs ayant une certaine expérience technique. Pour la plupart des utilisateurs, l’interface interactive convient parfaitement pour créer les filtres personnalisés dont vous avez besoin.

Table des matières

Qu’est-ce que Sieve ?

Sieve est un langage de programmation utilisé pour filtrer les e-mails. Vous pouvez créer des filtres en Sieve en écrivant des règles simples. Par exemple, « Attribuer le label vert à tous les messages de Kyle ». En combinant ces règles, vous pouvez créer un système de filtrage sophistiqué.

Vous pouvez écrire des règles Sieve de toutes pièces, vous inspirer d’exemples comme ceux présentés dans cet article ou utiliser un logiciel qui vous facilite la tâche.

En réalité, nous vous proposons déjà un moyen de créer des filtres Sieve à l’aide de l’interface interactive, qui génère des filtres Sieve à partir de vos saisies. Une autre bonne méthode pour apprendre le Sieve consiste à créer des filtres à l’aide de l’interface interactive, puis à les modifier en Sieve, car l’interface interactive elle-même utilise un sous-ensemble de Sieve.

Par exemple, comparez le filtre suivant créé à l’aide de l’interface interactive…


… avec le code du même filtre affiché dans l’éditeur Sieve :

Cet article va vous présenter Sieve et vous expliquer comment écrire vos propres filtres Sieve. Si vous avez besoin de plus d’informations sur l’utilisation de Sieve, de nombreux autres tutoriels en ligne peuvent vous aider. Si vous avez des questions sur Sieve dans Proton Mail auxquelles cette page ne répond pas, vous pouvez toujours contacter notre équipe de support ici.

Premiers pas

Pour commencer à créer des filtres Sieve, connectez-vous à mail.proton.me(nouvelle fenêtre), allez dans Paramètres → Tous les paramètres → Proton Mail → Filtres → Ajouter un filtre Sieve.

Un script Sieve se compose d’une liste de commandes. Dans la plupart des scripts, il commence par une commande require. La commande require charge une extension qui fournit une certaine fonctionnalité. Par exemple, pour attribuer un label ou placer un message dans un dossier, nous avons besoin de la commande fileinto.

Pour charger cette commande, il nous suffit d’écrire :

require "fileinto";

Pour charger plusieurs extensions, vous pouvez utiliser une liste :

require ["fileinto", "imap4flags"];

Dans ce cas, imap4flags charge une extension qui vous permet de marquer un e-mail comme lu. Après la commande require, vous effectuerez souvent des tests sur le message entrant. Pour ce faire, on combine if avec une autre commande telle que address ou header.

Enfin, si les tests réussissent, vous pouvez appliquer une action à un message. Par exemple, supposons que nous voulions placer tous les e-mails d’un expéditeur spécifique dans le même dossier et marquer le message entrant comme lu. Cela s’écrirait ainsi :

require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{ 
    addflag "\\Seen";
    fileinto "enemies";
}

Notez que le symbole # indique un commentaire et n’est pas interprété comme faisant partie du script Sieve. De plus, le dossier ou le label que vous définissez (ici, enemies) doit exister dans votre environnement : vous pouvez apprendre à créer des dossiers et des labels ici. Après avoir saisi ce filtre, cliquez sur le bouton ENREGISTRER. Votre filtre s’appliquera désormais à chaque e-mail entrant.

Bien sûr, vous pourriez vouloir placer les e-mails de plusieurs expéditeurs dans le même dossier. Dans ce cas, vous pouvez transmettre une liste de chaînes à la commande d’adresse (une chaîne(nouvelle fenêtre) est une suite de caractères, dans ce cas une adresse e-mail) :

require ["fileinto", "imap4flags"];
# I don't really like Spott and Kyyyhel
if address :is "from" ["Spott.Tenerman@northpark.example.com", "Kyhel.Broski@northpark.example.com"]
{ 
    addflag "\\Seen";
    fileinto "enemies";
}

Notez que chaque fois que vous pouvez transmettre une chaîne à une condition de test, il est généralement aussi possible de transmettre une liste. Le système tentera alors de trouver une correspondance en essayant l’une des chaînes de la liste. Cela ne s’applique pas aux commandes comme fileinto, addflag, etc.

But Sieve is more powerful than just reordering your mailbox. It also allows you to reject emails with a response message:

require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
    reject "My name is not Kyhel";
}

Utiliser des tests

Combiner des tests en Sieve

Comme nous vous l’avons montré dans la section Premiers pas, vous pouvez effectuer des tests à l’aide de la commande if sur les messages entrants afin de déterminer si un e-mail doit être concerné par une commande require.

Outre la commande if, il existe d’autres commandes de test qui vous permettent de structurer votre script en toute simplicité.

Else

La commande else vous permet de faire quelque chose lorsque la commande if n’a pas exécuté ses actions.

require ["fileinto"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
    fileinto "Kenny";
} else { 
    fileinto "Understandable";
}

Ici, l’e-mail sera déplacé dans le dossier Kenny si l’objet est exactement mmph mmph. Dans l’autre cas (donc si l’objet n’est pas exactement mmph mmph), l’e-mail sera déplacé dans le dossier Understandable.

Elsif

La commande elsif est la contraction de else if. Tout comme la commande else, elle sera exécutée si la condition if n’est pas remplie, mais uniquement si la condition elsif est remplie. Si la condition elsif n’est pas remplie, le bloc elsif ou else suivant sera alors exécuté.

require ["fileinto", "imap4flags"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
    fileinto "Kenny";
# Kyhel sends me only speeches
} elsif address :is "from" "Kyhel.Broski@northpark.example.com" { 
    fileinto "Speeches";
} else { 
# otherwise the mail is important, so add a star.
    addflag "\\Flagged";
}

Notez qu’un seul des blocs if, elsif ou else sera exécuté lors d’un même passage.

Anyof

Parfois, vous devez exécuter une commande lorsque l’un de plusieurs tests réussit. Pour cela, vous pouvez utiliser la commande anyof. Ceci est fait en écrivant anyof suivi d’une parenthèse « ( », des instructions que vous souhaitez tester séparées par des virgules, et d’une parenthèse fermante « ) ».

require ["fileinto", "imap4flags"];
# Kenny either sends from kenny@northpark.example.com or puts "mmph mmph" in the subject.
   if anyof(address :is "from" "kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
    fileinto "Kenny";
}

Ce script placera les messages qui proviennent de kenny@northpark.example.com ou contiennent mmph mmph dans l’objet dans le dossier Kenny.

Allof

Le pendant de anyof existe également : allof. Cela vous permet d’exécuter une commande uniquement lorsque toutes les conditions données correspondent :

require ["fileinto", "imap4flags"];
# Kenny always sends me mails with mmph mmph
if allof(address :is "from" "Kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
    fileinto "Kenny";
}


Ce script placera les messages qui proviennent de kenny@northpark.example.com et contiennent mmph mmph dans l’objet dans le dossier Kenny.

Not

Enfin, vous devez parfois appliquer une commande si quelque chose ne correspond pas. Ajouter not devant l’instruction permettra de s’en assurer :

require ["fileinto", "imap4flags"];
# If a subject line does not contain real guitar put it into the young people folder
if not header :contains "subject" "real guitar"
{
    fileinto "Young people";
}

Ce qui équivaut à :

require ["fileinto", "imap4flags"];
# The else part will be evaluated if the condition is not true
if header :contains "subject" "real guitar"
{
    # do nothing
} else {
    fileinto "Young people";
}

Cela place tous les messages qui ne contiennent pas real guitar dans l’objet dans le dossier Young people.

Il est bien sûr possible de combiner tous ces tests. Par exemple, vous pouvez vouloir ajouter un message aux favoris si celui-ci ne provient pas de Kenny et ne contient pas mmph mmph dans l’objet :

require ["fileinto", "imap4flags"];
if not anyof (    header :contains "subject" "mmph mmph", 
    address :is "from" "Kyhel.Broski@northpark.example.com" ) { 
    addflag "\\Flagged";
}

Effectuer des tests sur les en-têtes

En utilisant la commande address, vous pouvez effectuer des tests sur les en-têtes d’adresse, tels que l’en-tête from, to et sender. Vous pouvez extraire différentes parties de l’adresse e-mail en utilisant l’un des drapeaux suivants :

  • :localpart — la partie avant l’arobase (@)
  • :domain — la partie après l’arobase (@)
  • :all — l’adresse complète

L’extrait suivant explique l’utilisation de cette commande :

require ["fileinto", "imap4flags"];
# Northpark people are made of paper, springfield are mostly yellow
if address :domain "from" "northpark.example.com"
{
    fileinto "PaperPeople";
} elsif address :domain "from" "springfield.example.com"{
    fileinto "YellowPeople";
}
if address :localpart "from" "chef"
{
    addflag "\\Flagged";
}

En résumé, ce script placera tout ce qui est envoyé depuis le domaine northpark.example.com dans PaperPeople et springfield.example.com dans YellowPeople.

De plus, quel que soit le domaine depuis lequel un message est envoyé, si la partie avant @ est égale à chef (par exemple chef@example.com), le message sera marqué. Une autre utilisation intéressante consiste à stocker automatiquement tout ce qui est envoyé à une adresse dans un dossier :

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
    fileinto "Support";
}

Avancé

La commande envelope vous permet d’effectuer plus de tests. En général, le test address récupère uniquement la valeur de l’en-tête. Cependant, dans la session SMTP, on peut spécifier une adresse from différente de celle de l’en-tête.

Dans l’interface des en-têtes de Proton Mail, l’envelope-from est égal à l’en-tête return-path et l’envelope-to est égal à l’en-tête x-original-to.

En utilisant la commande envelope, vous pouvez récupérer les adresses réelles to: et from: de l’enveloppe. Notez qu’aucun autre champ que ces deux-là n’existe, ainsi sender n’existe pas dans cette commande. Veuillez noter que envelope se trouve dans une extension et vous demande donc d’utiliser d’abord la commande require pour cette extension.

require ["fileinto", "imap4flags", "envelope"];
# Northpark people are made of paper, springfield are mostly purple
if envelope :domain "from" "northpark.example.com"
{
    fileinto "PaperPeople";
} elsif envelope :domain "from" "springfield.example.com"{
    fileinto "PurplePeople";
}
if envelope :localpart "from" "chef"
{
    addflag "\\Flagged";
}

Utiliser des comparateurs pour évaluer deux valeurs

Lorsqu’un test évalue deux valeurs, il est possible de spécifier comment cette comparaison est effectuée en utilisant différents drapeaux appelés comparators. Auparavant, nous avons déjà utilisé deux comparateurs : :is et :contains, qui vérifient que la chaîne donnée est exactement égale à la valeur spécifiée, et que la valeur spécifiée contient la chaîne donnée, comme dans le test suivant.

require ["fileinto", "imap4flags"];
if not anyof (
    header :contains "subject" "mmph mmph", # the subject contains mmph mmph 
    address :is "from" "Kyhel.Broski@northpark.example.com" # the recipient is exactly Kyhel.Broski@northpark.example.com
) { 
    addflag "\\Flagged";
}

Le comparateur :matches peut également être utilisé pour définir un format plus spécifique. Il comparera les deux valeurs du début à la fin, tout comme le comparateur :is. Cependant, dans le cas de :matches, la valeur que vous avez définie peut contenir les valeurs ? et *. Le point d’interrogation correspondra à un seul caractère, et l’étoile (appelée wildcard) correspondra à zéro ou plusieurs caractères.

Avec ce format, vous pouvez créer ce test :

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" { 
    addflag "\\Flagged";
}

Dans cet exemple, le test réussira si l’objet du message commence par mmph et contient ensuite n’importe quel caractère après cela. En d’autres termes, le message sera marqué lorsque l’objet commence par « mmph ». « mmph mmph » et « mmph mmph Hello » correspondront tous les deux ; « Hello mmph » et « Springfield sales » ne correspondront pas.

L’étoile peut également être utilisée au milieu de la valeur et plusieurs fois, comme suit :

require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" { 
    addflag "\\Flagged";
}

Ce test correspondra si l’objet commence par « mmph » (avec un espace), contient un autre « mmph » (avec un espace) et se termine par « mmph » (sans espace). Les objets correspondants sont « mmph mmph mmph », « mmph mmph mmphmmph » ou « mmph is mmph and mmph ».

Ce comparateur :matches peut être très utile pour la comparaison d’adresses. Comme vous le savez peut-être, Proton Mail possède plusieurs domaines : protonmail.com and proton.me. Si vous souhaitez vérifier qu’un message provient d’un utilisateur de Proton Mail, vous pouvez utiliser ce script :

require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
    fileinto "Internal";
}

Si, pour une raison quelconque, vous devez faire correspondre exactement le caractère * ou ?, vous pouvez alors les échapper en ajoutant \\ devant : \\* correspondra à une étoile et \\? correspondra à un point d’interrogation.

Notez que nous prenons également en charge l’extension regex, qui définit aussi le comparateur :regex. Ce comparateur est une version plus précise de :matches, mais il est très complexe. Pour plus d’informations, veuillez lire la documentation officielle(nouvelle fenêtre).

Dans certains cas (comme vous le verrez dans la suite de cet article), vous pouvez vouloir comparer des valeurs numériques. Le paquet relational est conçu pour cet usage. Ce paquet définit le comparateur :value qui est suivi du type de comparaison.

Il vous permet de vérifier si une valeur est supérieure à (le type de comparaison étant « gt »), supérieure ou égale à (« ge »), égale à (« eq »), inférieure ou égale à (« le ») ou inférieure à (« lt ») la valeur donnée.

Lors de la comparaison de valeurs numériques, le paquet comparator-i;ascii-numeric est également très utile. Il indique à l’interprète de script que le contenu de la chaîne est un nombre, et non une chaîne standard. Il peut être utilisé en ajoutant au test :comparator “i;ascii-numeric”.

Avec toutes ces informations, nous pouvons construire le script suivant :

require ["fileinto", "relational", "comparator-i;ascii-numeric"];  
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"   
{    
 fileinto "Dummy example";
}

Ce test déplacera le message vers le dossier Dummy example si l’objet est supérieur ou égal à 2. Si l’objet n’est pas un nombre, mais un texte, alors le test échouera. En tant que tel, cet exemple semble très bête, mais il est destiné à être utilisé en combinaison avec d’autres extensions comme date, que nous définirons plus tard dans cet article.

Comparaison en utilisant le contexte dans Sieve

Vous pouvez également accéder aux informations relatives à votre compte et au contexte de Proton Mail en général à l’aide d’extensions. Par exemple, vous pouvez vérifier si l’adresse de l’expéditeur figure dans votre liste de contacts.

Accéder à votre liste de contacts

Vous pouvez accéder à votre liste de contacts en utilisant l’extension extlists. Combiné avec les tests d’en-tête, vous pouvez ensuite vérifier si un contact figure dans votre liste de contacts.

require ["fileinto", "extlists"];  
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"   
{    
 fileinto "Known"; 
}

Ce test marquera un message avec le label Known si l’expéditeur est contenu dans la liste :addrbook:personal?label=Family. La liste peut être divisée en deux parties. Premièrement, :addrbook:personal signifie que l’adresse se trouve dans votre carnet d’adresses personnel. Deuxièmement, label=Family restreint davantage la liste, en spécifiant qu’en plus d’être dans votre carnet d’adresses, le contact doit également appartenir au groupe de contacts Family. Si vous le souhaitez, vous pouvez modifier ce label pour un autre groupe de contacts. Vous pouvez utiliser :addrbook:personal?label=Work si vous le souhaitez, auquel cas le test ne réussirait que si l’expéditeur est dans votre carnet d’adresses et dans le groupe de contacts Work.

Plus généralement, une liste respecte le Tag URI Scheme(nouvelle fenêtre), et vous pouvez ajouter des paramètres supplémentaires pour affiner vos filtres. Vous pouvez ensuite utiliser cette liste comme suit :

require ["fileinto", "extlists"];  
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{    
 # some actions... 
}

Nous fournissons quatre listes différentes :

  • :addrbook:personal¹ vérifie si une adresse figure dans votre liste de contacts. La liste accepte le paramètre label qui correspond à un groupe de contacts spécifique. Ce paramètre peut se décliner en quatre sous-versions :
    • :addrbook:personal?label=something correspondra à un contact qui se trouve dans le groupe de contacts « quelque chose » ;
    • :addrbook:personal?label.starts-with=something correspondra à un contact qui appartient à au moins un groupe commençant par « quelque chose » ;
    • :addrbook:personal?label.ends-with=something correspondra à un contact qui appartient à au moins un groupe se terminant par « quelque chose » ;
    • :addrbook:personal?label.contains=something correspondra à un contact qui appartient à au moins un groupe contenant « quelque chose ».

Vous pouvez également accéder aux informations de chiffrement concernant le message correspondant :

  • :addrbook:personal?keypinning=true correspondra à un contact qui possède une clé de confiance. Remplacer true par false permettra de cibler un contact qui ne possède pas de clé de confiance ;
  • :addrbook:personal?encryption=true correspondra à un contact pour lequel le chiffrement est activé. Remplacer true par false permettra de cibler un contact pour lequel le chiffrement n’est pas configuré ou est désactivé ;
  • :addrbook:personal?signing=true correspondra à un contact pour lequel la signature est activée. Remplacer true par false correspondra à un contact pour lequel la signature est désactivée.
  • :addrbook:myself¹ correspond à toutes les adresses qui vous appartiennent ;
  • :addrbook:organization correspond à toutes les adresses appartenant à un membre de l’organisation dont vous êtes membre ;
  • :incomingdefaults:inbox vérifie si l’adresse figure dans votre liste d’adresses autorisées ;
  • :incomingdefaults:spam vérifie si l’adresse figure dans votre liste d’adresses bloquées.

Combinée à l’extension de variables (décrite dans le paragraphe suivant), les variables correspondantes seront modifiées. La variable correspondante ${0} contiendra toujours la dernière adresse e-mail de la liste spécifiée. Si la liste comporte la note 1, la variable correspondante ${1} contiendra le nom d’affichage.

Par exemple, avec les listes ci-dessous, vous pouvez créer un filtre qui supprimera tous les e-mails reçus de toute personne autre que votre famille ou figurant sur votre liste blanche :

require "extlists";  
# checks that the sender is not in the contact group Family, whilelisted or yourself
if not anyof(
    header :list "from" ":addrbook:personal?label=Family", 
    header :list "from" ":incomingdefaults:inbox",
    header :list "from" ":addrbook:myself"
) {    
  discard; # permanently delete the email
}

Si cette condition est remplie, l’action discard sera exécutée. Cette action supprime l’e-mail immédiatement et définitivement . Vous pouvez également simplement le déplacer vers le dossier de la corbeille à l’aide d’une action fileinto au lieu d’un discard : fileinto “trash”;.

Création de variables

Un autre outil utile lors de la gestion du contexte est la définition de variable. Une variable est un emplacement de stockage temporaire dans lequel vous pouvez placer du texte et lui associer un nom. Plus tard, vous pourrez réutiliser ce contenu en l’appelant par son nom. Par exemple, vous pourriez avoir le script suivant :

require ["reject", "variables"];
# First check who is the sender
if allof(
    address :is "from" "Kenny@northpark.example.com", 
    header :contains "subject" "mmph mmph"
) {
    # It's from Kenny!
    # Create the variable message containing 'mmph mmph'
    set "message" "mmph mmph";
} else {
    # Create the variable message containing 'Sorry, I don't want emails today!'
    set "message" "Sorry, I don't want emails today!";
}
# Then, reject the message
reject "${message}";

Le but de ce script est de rejeter un e-mail avec un message personnalisé. Si l’e-mail d’origine provient de kenny et que son objet est « mmph mmph », la variable « message » est créée et contient mmph mmph. Dans le cas contraire, le message sera rempli avec « Sorry, I don’t want emails today! ». Enfin, lors de la dernière étape, nous réutilisons cette variable dans la commande de rejet.

Sieve ne définit pas de variables nativement. Elles sont donc définies dans l’extension variables, qui doit être requise au début de votre script. Il existe deux façons de définir une variable.

  • Création explicite d’une variable :

L’action set est fournie pour créer une variable.

require "variables";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";

La première chaîne correspond au nom de votre variable et la deuxième à sa valeur. Ainsi, l’exemple précédent crée une variable appelée labelname et contenant Work.

Une fois une variable définie, vous pouvez l’appeler en ajoutant le format suivant dans une chaîne : ${name}, où name is le nom de votre variable. Lors de l’exécution, elle sera remplacée par la valeur de la variable (si vous n’avez pas défini la variable, elle sera remplacée par une chaîne vide). Ainsi, dans le script suivant :

require "variables";
require "fileinto";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";
# Move the email in "${foldername}/${labelname}" which becomes after variable resolution "/Work";
fileinto "${foldername}/${labelname}";

Votre e-mail sera marqué du label /Work. Comme nous avons déjà défini la variable labelname, elle est donc remplacée par Work. En revanche, foldername n’est pas défini, il est donc simplement retiré.

  • Assignation implicite d’une variable :

Le cas d’utilisation le plus intéressant des variables est l’utilisation d’un test :matches. Prenons l’exemple suivant, où l’expéditeur de l’e-mail est test@proton.me :

require "variables";
require "fileinto";
# do a matches test 
if header :matches "from" "*@*" {
    # The first * matches "test", the second "protonmail".  
    # Thus, the first matching variable contains "test"
    fileinto "${1}";
}

Lorsqu’il est utilisé avec l’extension de variables, le résultat d’une opération match est stocké dans les variables. Plusieurs variables seront définies avec un nom numérique. Tout d’abord, la variable 0 contiendra la correspondance complète (dans notre exemple, il s’agira de l’adresse complète : test@proton.me). Ensuite, le premier groupe de correspondance sera attribué à la variable 1 (dans notre exemple, ce sera test), le deuxième groupe de correspondance sera attribué à la deuxième variable (proton.me), et ainsi de suite jusqu’au dernier groupe de correspondance.

Dans notre exemple, la commande fileinto est exécutée. L’emplacement est défini sur ${1}, ce qui est reconnu comme une variable et donc remplacé par sa valeur, telle que calculée ci-dessus : test.

Notez qu’il est également possible d’assigner des variables dans un test :regex, en utilisant des groupes de correspondance d’expressions régulières.

Transformation de variables

Une possibilité intéressante est la transformation de variables. Pour cela, le mot-clé set peut être utilisé avec une combinaison d’indicateurs permettant de modifier la valeur avant de l’assigner à la variable.

  • :lower modifiera la valeur d’une variable en minuscules ;
  • :upper modifiera la valeur d’une variable en majuscules ;
  • :lowerfirst passera la première lettre de la valeur de la variable en minuscules ;
  • :upperfirst passera la première lettre de la valeur de la variable en majuscules ;
  • :quotewildcard échappera tout wildcard contenu dans la chaîne, afin qu’il puisse être utilisé littéralement dans une instruction de correspondance ;
  • :length renverra la longueur de la valeur.

Notez que vous pouvez également réutiliser une variable définie dans une autre action set. Améliorons nos exemples précédents :

require "variables";
require "fileinto";
# Set labelname to WORK, and modify it to lowercase with the first letter in upper case 
set :lower :upperfirst "labelname" "WORK";
set :lower :upperfirst "foldername" "geneva";
# Create a variable that is a combination of foldername and labelname
set "location" "${foldername}/${labelname}";
fileinto "${location}";

Étape par étape, le filtre va créer trois variables. La première commande set va créer la variable labelname. Le contenu de la variable est Work. En effet, la valeur d’origine WORK est transformée à l’aide des indicateurs :lower et :upperfirst, changeant la casse en work puis en Work.

La deuxième commande set va créer une deuxième variable appelée foldername, contenant la chaîne Geneva. En effet, les indicateurs :lower et :upperfirst ont été utilisés.

Enfin, la variable location est créée. La valeur « ${foldername}/${labelname} » contient deux variables : foldername et labelname. L’interpréteur Sieve va donc remplacer ces variables par leurs valeurs : Work et Geneva.

Enfin, la variable location est utilisée comme argument de la commande fileinto. Ainsi, l’e-mail sera déplacé vers le dossier dont le nom est la valeur de la variable location : Work/Geneva.

Les comparateurs peuvent également être appliqués aux variables correspondantes :

require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
    set :lower :upperfirst "fileintovar" "${1}";
    fileinto "${fileintovar}";
}

Ici, si l’expéditeur de l’e-mail est test@proton.me, il sera marqué avec le label Test.

Une autre façon de modifier la valeur d’une variable consiste à utiliser l’extension vnd.proton.eval. Cette extension définit le nouvel indicateur :eval, qui vous permettra d’effectuer des calculs simples :

require "variables";
require "fileinto";
require "vnd.proton.eval";
# do a match test on the sender address
if header :matches "from" "*" {
    # create a variable called length, containing the length of the first     
    # matching variable
    set :length "length" "${1}"; 
    # Create a variable called fileintovar containing the result of the expression written below
    set :eval "fileintovar" "${length} * 25 - 1 / 8+3";
    fileinto "${fileintovar}";
}

Dans cet exemple, et en considérant toujours que l’e-mail provient de test@proton.me, l’e-mail sera marqué avec la valeur 478. En effet, la longueur de la première variable correspondante est de 19, et le résultat de 19 * 25 – 1 / 8 + 3 est arrondi à l’entier supérieur, soit 478.

Cela peut sembler inutile à première vue, mais cette extension prend tout son sens lorsqu’elle est combinée avec d’autres opérations.

Comparaison avec d’autres champs dans Sieve

Il est également possible de filtrer sur des en-têtes spécifiques. Par exemple, pour classer tous les messages envoyés à des listes (il s’agit souvent de messages marketing ou de newsletters), vous pouvez faire :

require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
    fileinto "advertisements";
}

Pour trier les e-mails des réseaux sociaux dans leur propre dossier, vous pouvez écrire :

require "fileinto";
# Filter all lists into the same folder
if anyof(exists "x-facebook", exists "x-linkedin-id") {
    fileinto "social";
} elsif exists "list-unsubscribe"
{
    fileinto "advertisements";
}

Notez que nous utilisons :

anyof(exists "x-facebook", exists "x-linkedin-id")

au lieu de :

exists ["x-facebook", "x-linkedin-id"]

Car cette dernière commande vérifie si x-facebook et x-linkedin-id ont tous deux été définis.

Pour voir concrètement quelle valeur contient un en-tête, vous pouvez utiliser le test header :

require "fileinto";
# Put all mails that have been sent without TLS/SSL into the same folder
if header :is "x-pm-transfer-encryption" "none" {
    fileinto "unencrypted";
}

Outre l’opération :is, qui effectue une correspondance exacte, la commande header prend également en charge :matches, qui effectue des correspondances à l’aide de wildcards (par exemple, « *@*.com » correspondra à toute adresse e-mail qui se termine par .com), et la commande :contains, qui vérifie si l’en-tête contient une chaîne donnée.

Pour concevoir des filtres Sieve, il peut être utile de récupérer les en-têtes d’un e-mail. Pour ce faire dans l’interface web de Proton Mail, allez dans Plus () → Afficher les en-têtes. Une nouvelle fenêtre s’ouvrira, contenant tous les en-têtes de l’e-mail.

Filtrer en fonction de la taille du message dans Sieve

Il est possible de traiter les messages volumineux différemment des petits messages. Par exemple, vous pourriez vouloir marquer les messages volumineux afin de pouvoir les supprimer pour libérer de l’espace dans votre messagerie. Cela peut être réalisé de la manière suivante :

require ["imap4flags"];
# Flag emails that probably have large attachments (> 2 MiB)
if size :over 2M # you can also use 2097152 if you want, they are synonymous
{
    addflag "\\Flagged";
}
# Automatically mark as read really small messages. They can't have much content anyway...
if size :under 1000
{
    addflag "\\Seen";
}

Comme vous pouvez le voir, des unités sont disponibles si vous souhaitez spécifier de grandes tailles, en ajoutant la lettre correspondant à l’unité attendue juste après le nombre. Trois unités sont disponibles : K pour un kibioctet (ou 1 024 octets), M pour un mébioctet (ou 1 048 576 octets) et G pour un gibioctet (ou 1 073 741 824 octets).

Veuillez noter que dans ce cas, « over » signifie supérieur à, et « under » signifie inférieur à. Cela signifie que si un message a une taille d’exactement 1 000 octets, alors ni

size :under 1000

ni

size :over 1000

ne correspondra.

Notez que les filtres Sieve n’ont pas accès au contenu réel et affichent uniquement la taille chiffrée.

Effectuer des actions avancées sur les messages

Vous pouvez exécuter différentes réactions à un message dans Sieve. Nous avons déjà présenté les actions fileinto, addflag, discard et reject dans les sections précédentes. Ici, nous présenterons des actions plus avancées.

Messages d’absence et tests de date

Vous pouvez reproduire la fonctionnalité de réponse automatique dans Sieve en utilisant la commande vacation. En fait, la fonctionnalité de réponse automatique dans vos paramètres s’appuie sur Sieve pour fonctionner. Mais en utilisant les options de vacation à l’intérieur d’un script, vous disposez de bien plus de possibilités pour personnaliser vos réponses automatiques. Par exemple, vous pouvez adapter des messages spécifiques en fonction de certaines conditions. Remarque : comme pour la fonctionnalité de réponse automatique dans les paramètres, l’action vacation n’est disponible que dans les abonnements payants.

La commande vacation envoie une réponse d’absence à quiconque tente de vous contacter. Elle est souvent couplée aux tests currentdate ou date pour envoyer des réponses dans un laps de temps spécifique.

Supposons que je parte en vacances du 14 juillet 2017 au 14 août 2017, à l’heure du Colorado. Je peux utiliser le code Sieve suivant pour définir un répondeur automatique :

require ["date", "vacation", "relational"];
if allof(currentdate :zone "US/Mountain" :value "ge" "date" "2017-07-14",
 currentdate :zone "US/Mountain" :value "le" "date" "2017-08-14")
{
    vacation "Queue you guys, I'm going on vacation.";
}

L’un des arguments facultatifs d’une commande vacation sont les arguments :handle et :days. Par défaut, Sieve ne répondra pas plusieurs fois au même expéditeur dans un nombre de jours spécifique appelé « timeout » (délai d’attente). Cela vous évite d’envoyer par inadvertance de nombreux e-mails automatisés.

Pour contrôler le délai d’attente, vous pouvez utiliser le paramètre :days. L’argument :days est utilisé pour spécifier la période pendant laquelle les adresses sont conservées et ne reçoivent pas de réponse, et est toujours spécifié en jours. Parfois, vous avez plusieurs commandes vacation dans votre script Sieve, et vous devez vous assurer que chacune d’elles envoie une réponse au moins une fois (si la règle correspond). Dans ce cas, l’option :handle peut être utilisée. L’argument de :handle est une chaîne de caractères qui identifie le type de réponse envoyée.

Pour voir comment cela fonctionne, supposons que vous soyez enseignant. Les enseignants reçoivent souvent des devoirs par e-mail. Il est utile de les trier dans leur propre dossier. De plus, vous pouvez refuser tout devoir rendu après la date limite.

Dans ce cas, vous pourriez vouloir utiliser handle pour vous assurer que les réponses sont envoyées en cas de besoin :

require ["date", "vacation", "reject", "fileinto", "relational"];
if header :contains "subject" "Homework assignment 1"
{
    # remind people not to forget the attachments
    if size :under 5000
    {
        vacation :handle "Homework assignment 1 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
    }
   
    # check if the student made the deadline
    if  currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
    {
        fileinto "Homework Assignment 1";
    } else {
        reject "Too late, you missed the deadline.";
    }
}
if header :contains "subject" "Homework assignment 2"
{
    # remind people not to forget the attachments
    if size :under 5000
    {
        vacation :handle "Homework assignment 2 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
    }
   
    # check if the student made the deadline
    if  currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
    {
        fileinto "Homework Assignment 2";
    } else {
        reject "Too late, you missed the deadline.";
    }
}

Voici tous les arguments autorisés pour la réponse d’absence, répertoriés dans l’ordre dans lequel ils doivent être transmis :

  • :days est le nombre de jours pendant lesquels le répondeur automatique doit s’abstenir d’envoyer une réponse au même expéditeur après avoir envoyé un message d’absence
  • :subject est un préfixe (par défaut auto) que le répondeur automatique doit utiliser pour répondre à l’expéditeur. Par exemple, « Homework Assignment 2 » recevra une réponse avec « late: Homework Assignment 2 » si :subject “late” est transmis.
  • :mime indique que la première ligne de la réponse utilise un format spécifique. Cela permet à l’expéditeur de répondre avec des messages HTML. Par exemple, pour rédiger une réponse en HTML, transmettez l’argument :mime et écrivez dans la première ligne de la réponse Content-Type : text/html.
  • :handle est une chaîne de caractères qui identifie le type de réponse envoyée.

Veuillez noter que le paramètre :zone dans currentdate est facultatif et utilisera l’heure locale du serveur (Genève, Suisse, dans le cas de Proton Mail) s’il n’est pas défini.

Le paramètre de zone accepte les décalages horaires, qui sont des chaînes sous la forme de « +0100 » signifiant UTC+1, et les fuseaux horaires réels de la base de données ICANN (voir https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(nouvelle fenêtre)). La dernière option est souvent plus utile (bien qu’elle ne soit pas standard dans Sieve) car elle encode également l’heure d’été de chaque fuseau horaire.

Vous pouvez comparer des dates en utilisant le paramètre normal :is/ :contains/ :matches. Ainsi, par exemple, la commande Sieve suivante correspond à n’importe quelle date en juillet 2017 :

currentdate :zone "US/Mountain" :matches "date" "2017-07-??"

Mais dans la plupart des cas, le paramètre :value est bien plus utile.

Le dernier paramètre que vous devez transmettre est le format. Le format encode également la partie de la date que vous souhaitez comparer. Dans l’exemple donné, nous avons utilisé le format de date. Tous les formats pris en charge sont :

  • year, l’année encodée au format « 0000 » à « 9999 »
  • month, le mois encodé de « 01 » à « 12 »
  • day, le jour encodé de « 01 » à « 31 »
  • date, encodée sous la forme aaaa-mm-jj
  • hour, l’heure encodée de « 00 » à « 23 »
  • minute, la minute encodée de « 00 » à « 59 »
  • second, la seconde encodée de « 00 » à « 60 » (60 est une seconde intercalaire(nouvelle fenêtre), qui ne se produit à 23:59:60 que lorsque les scientifiques le jugent nécessaire)
  • time, l’heure sous la forme hh:mm:ss
  • iso8601, la date et l’heure selon la norme ISO8601, par exemple : 2005-08-15T15:52:01+00:00
  • std11, la date et l’heure selon la norme RFC2822, par exemple : Mon, 15 Aug 2005 15:52:01 +0000
  • zone, le décalage de fuseau horaire au format +/-zzzz, par exemple +0000 ou -1200
  • julian, le nombre de jours depuis le 17 novembre 1858 UTC
  • weekday, le jour de la semaine en commençant par le dimanche à 0 jusqu’au samedi à 6

Enfin, il est également possible de récupérer la date à partir d’un en-tête au lieu d’utiliser currentdate. Cette commande de date fonctionne de la même manière que currentdate, sauf qu’elle nécessite une chaîne de caractères supplémentaire avant la chaîne de format : le nom de l’en-tête. Par exemple :

date :zone "US/Mountain" :matches "received" "date" "2017-07-??"

Veuillez noter que les en-têtes ne sont pas nécessairement exacts : un expéditeur peut les modifier à sa guise, ils ne sont donc pas fiables.

Considérations :

  1. Le répondeur automatique ne répond pas aux messages générés automatiquement tels que les listes de diffusion, les e-mails envoyés par un autre répondeur automatique ou les messages envoyés par une adresse de non-réponse (noreply).
  2. Le répondeur automatique n’enverra pas de messages plusieurs fois à la même adresse e-mail, sauf si la commande vacation a un :handle différent.

Gérer l’expiration

Une fonctionnalité unique de Proton Mail is la possibilité de définir un délai d’expiration pour les messages envoyés, moment auquel le message sera supprimé de la messagerie du destinataire.

Vous pouvez également utiliser cette fonctionnalité pour gérer vos messages entrants en y ajoutant un délai d’expiration :

require "vnd.proton.expire"; 
# permanently delete all incoming and outgoing emails after 10 days
expire "day" "10";

Le script ci-dessus supprimera tout e-mail reçu après 10 jours. Celui-ci est un peu extrême, car il s’applique à tous les e-mails. Au lieu de cela, vous devriez probablement utiliser une condition pour appliquer le script uniquement à un ensemble spécifique d’e-mails. Par exemple, vous pourriez faire expirer tout message provenant de personnes ne figurant pas dans vos contacts :

require ["extlists", "vnd.proton.expire"];
# permanently delete after 10 days any email not from me or from someone in my address book.
if not anyof(
    header :list "from" ":addrbook:personal",
    header :list "from" ":addrbook:myself"
) {
 expire "day" "10";
}

Remarque : si le délai d’expiration spécifié dépasse 730 jours, il sera automatiquement limité à 730 jours.

Limites de Sieve

Il existe plusieurs limites de Sieve que vous devriez noter.

  • Les messages envoyés ne peuvent pas être déplacés manuellement ou par un filtre vers la Boite de réception/les Brouillons. Ils resteront toujours dans le dossier Envoyés, avec les dossiers/labels appliqués par l’utilisateur ou le filtre.
  • Les messages reçus ne peuvent pas être déplacés manuellement ou par un filtre vers les Brouillons/Envoyés.
  • Les brouillons ne peuvent pas être déplacés manuellement ou par un filtre vers la Boite de réception/les Envoyés.
  • Pour les messages dans les indésirables/spam — ou les messages classés dans les indésirables/spam lors du traitement — nous n’envoyons pas de réponses automatiques/messages d’absence. Si vous avez besoin d’une telle fonctionnalité, envisagez d’ajouter un dossier personnalisé — mySpam, par exemple — et de désactiver les notifications pour celui-ci.
  • Limites des réponses automatiques/messages d’absence

Note sur la prise en charge des expressions régulières

L’implémentation de Sieve par Proton respecte le standard de filtrage des e-mails Sieve, qui ne comprend qu’une prise en charge minimale des expressions régulières. Certaines syntaxes abrégées courantes d’expressions régulières, telles que \b (limite de mot), \w (caractère alphanumérique), \W (caractère non alphanumérique) et \d (chiffre), ne sont pas prises en charge dans Sieve. Par conséquent, l’utilisation de ces caractères abrégés dans les filtres peut entraîner leur échec silencieux. Cette limitation est due au standard Sieve lui-même, qui privilégie la simplicité et la compatibilité entre les plateformes. Pour plus de détails, consultez le projet de RFC sur les expressions régulières de Sieve.

Liste des actions et tests pris en charge

Packages

Sieve prend en charge les extensions suivantes. Vous pouvez vous référer à la documentation officielle pour plus d’informations.

Date

  • Utilisation : date
  • Description : (nouvelle fenêtre)fournit un moyen de vérifier les informations de date.
  • Documentation : https://tools.ietf.org/html/rfc5260(nouvelle fenêtre)
  • Implémentation : le comparateur par défaut est i;ascii-numeric et non i;ascii-casemap. En effet, la date n’est pas utile avec le comparateur casemap.
  • Voir : messages d’absence et tests de date

Enveloppe

FileInto

  • Utilisation : fileinto
  • Description : applique un label à un message ou le déplace vers un dossier.
  • Documentation : https://tools.ietf.org/html/rfc5228#section-4.1(nouvelle fenêtre)
  • Implémentation : les barres obliques indiquent le chemin d’accès complet des dossiers et elles doivent être échappées si un nom de label contient une barre oblique. Les options suivantes sont prises en charge :
    • Work” : il s’agit du label ou dossier appelé « Work »
    • Work/Project1” : il s’agit du sous-dossier « Project1 » qui se trouve dans le dossier « Work »
    • Work/Project1/Docs” : il s’agit du sous-dossier « Docs » qui se trouve dans le sous-dossier « Project1 », lui-même situé dans le dossier « Work »
    • Work/Misc\\/Others” : il s’agit du sous-dossier « Misc/Others » qui se trouve dans le dossier « Work »
  • Voir : Prise en main

Imap4flags

Reject

Vacation

Variables

Relationnel

  • Utilisation : relationnel
  • Description : fournit les opérateurs de correspondance relationnels.
  • Documentation : https://tools.ietf.org/html/rfc5231

Regex

  • Utilisation : regex
  • Description : fournit les opérateurs de correspondance regex.
  • Documentation : https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html

Comparateur numérique ASCII

Listes stockées en externe

  • Utilisation : extlists
  • Description : fournit l’accès aux listes de contacts.
  • Documentation : https://tools.ietf.org/html/rfc6134(nouvelle fenêtre)
  • Implémentation : les listes suivantes sont prises en charge
    • addrbook:personal : liste de contacts personnels. Les requêtes suivantes sont prises en charge :
      • label[.starts-with / .ends-with / .contains]=<group: string> : opération sur un groupe de contacts ;
      • keypinning=<value: true / false> définition de la clé publique du contact ;
      • encryption=<value: true / false> chiffrement par défaut du contact ;
      • signing=<value: true / false>  signature par défaut du contact.
    • :addrbook:myself adresses appartenant à l’utilisateur actuel ;
    • :addrbook:organization adresses appartenant aux membres de l’organisation actuelle ;
    • :incomingdefaults:inbox liste d’adresses autorisées
    • :incomingdefaults:spam liste d’adresses bloquées
  • Voir : Accéder à votre liste de contacts

Eval

  • Utilisation : vnd.proton.eval
  • Description : évalue une fonction arithmétique simple fournie dans une chaîne.
  • Documentation : Transformer des variables

Include

Expiration

  • Utilisation : vnd.proton.expire
  • Description : gère l’expiration des messages.
  • Documentation : Gérer l’expiration

Tests

Currentdate

  • Utilisation :
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>

Date

  • Utilisation :
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list

HasFlag

  • Utilisation :
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
  • Description : Vérifie si un certain message comporte un certain indicateur.
  • Package : imap4flags
  • Voir : Premiers pas

Enveloppe

  • Utilisation :
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>

Adresse·

  • Utilisation :
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
  • Description : Vérifie si le ou les en-têtes spécifiés, analysés comme une adresse, correspondent à la ou aux clés spécifiées.
  • Package : <par défaut>
  • Voir : Comparaison avec des adresses dans Sieve

En-tête

  • Utilisation :
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>

HasExpiration

  • Utilisation :
hasexpiration
  • Description : Vérifie si un message a un délai d’expiration défini.
  • Package : vnd.proton.expire

Exists

  • Utilisation :
exists <header-names: string-list>

Expiration

  • Utilisation :
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
  • Description : Compare le délai d’expiration du message avec la ou les clés fournies. Le test échouera s’il est exécuté sur un message sans date d’expiration.
  • Package : vnd.proton.expire

Size

  • Utilisation :
size <":over" / ":under"> <limit: number>

String

  • Utilisation :
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
  • Description : Évalue si l’une des chaînes sources correspond à l’une des clés.
  • Package : variables

Anyof

  • Utilisation :
anyof <tests: test-list>
  • Description : Effectue un OU logique sur les tests qui lui sont fournis.
  • Package : <par défaut>
  • Voir : Prise en main

Allof

  • Utilisation :
allof <tests: test-list>
  • Description : Effectue un ET logique sur les tests qui lui sont fournis.
  • Package : <par défaut>
  • Voir : Premiers pas

Not

  • Utilisation :
not <test: test>
  • Description : Inverse le résultat du test donné.
  • Package : <par défaut>
  • Voir : Premiers pas

True

  • Utilisation :
true
  • Description : Correspond toujours.
  • Package : <par défaut>

False

  • Utilisation :
false
  • Description : Ne correspond jamais.
  • Package : <par défaut>

Actions

Require

  • Utilisation :
require <packages: string-list>
  • Description : Charge une extension spécifiée afin que ses méthodes ou modifications puissent être utilisées.
  • Package : <par défaut>
  • Voir : Prise en main

FileInto

  • Utilisation :
fileinto <folder: string>
  • Description : Déplace le message en cours de traitement vers un certain dossier.
  • Package : fileinto
  • Voir : Premiers pas

Addflag

  • Utilisation :
addflag <list-of-flags: string-list>
  • Description : Ajoute l’indicateur spécifié au message en cours de traitement.
  • Package : imap4flags
  • Voir : Premiers pas

Removeflag

  • Utilisation :
removeflag <list-of-flags: string-list>
  • Description : Retire les indicateurs spécifiés du message en cours de traitement.
  • Package : imap4flags

Setflag

  • Utilisation :
setflag <list-of-flags: string-list>
  • Description : Retire tous les drapeaux et définit les drapeaux spécifiés sur le message en cours de traitement.
  • Package : imap4flags

Stop

  • Utilisation :
stop
  • Description : Arrête le traitement de tous les filtres Sieve. Les filtres Sieve suivants ne seront pas exécutés.
  • Package : <par défaut>

Return

  • Utilisation :
return
  • Description : Arrête le traitement du filtre Sieve actuel. Les filtres Sieve suivants seront tout de même exécutés.
  • Package : include

Set

  • Utilisation :
set [MODIFIER] <name: string> <value: string>
  • Description : Crée de nouvelles variables associant le nom donné et la valeur donnée.
  • Package : variables
  • Voir : Créer des variables

Discard

  • Utilisation :
discard
  • Description : Abandonne le message à la fin de ce filtre Sieve. Après l’abandon, aucun autre filtre Sieve ne sera exécuté.
  • Package : <par défaut>

Keep

  • Utilisation :
keep
  • Description : Annule la dernière commande d’abandon (discard). N’aura d’effet que s’il se trouve dans le même filtre Sieve. Si aucun abandon n’a été exécuté, cette commande n’aura aucun effet.
  • Package : <par défaut>

Reject

  • Utilisation :
reject <reason: string>
  • Description : Envoie un e-mail à l’adresse SMTP de l’expéditeur avec le motif et abandonne immédiatement ce message. La commande keep n’annulera pas cette action.
  • Package : <default>
  • Voir : Prise en main, Messages d’absence et tests de date

Expire

  • Utilisation :
expire <unit: "day" / "minute" / "second"> <value: string>
  • Description : Fait expirer un message après le délai indiqué.
  • Package : vnd.proton.expire
  • Voir : Gérer l’expiration

Unexpire

  • Utilisation :
unexpire
  • Description : Retire le délai d’expiration d’un message.
  • Package : vnd.proton.expire

Vacation

  • Utilisation :
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
  • Description : Envoie une réponse automatique à l’adresse SMTP de l’expéditeur avec le motif spécifié comme corps de message.
  • Package : vacation (nécessite un compte payant)
  • Voir : Messages d’absence et tests de date

Valid External List

  • Utilisation :
valid_ext_list <ext-list-names: string-list>
  • Description : Teste si toutes les listes externes données sont prises en charge et valides.
  • Package : extlists