Comment combiner des règles de filtrage dans des filtres de messages dans Thunderbird pour créer des critères de filtrage plus avancés?

13

Dans Thunderbird, on peut choisir soit Faire correspondre tous les éléments suivants, soit Faire correspondre l'un des éléments suivants pour un ensemble donné de règles de filtrage. Il n'y a aucun moyen de mélanger librement les opérateurs logiques OR et AND pour créer des critères plus complexes comme ((A ET B) OU (C ET D)) ET E.
Existe-t-il un plug-in permettant d'atteindre les objectifs ci-dessus?

Piotr Dobrogost
la source

Réponses:

5

Je devais filtrer un tas de sujets différents provenant d'une seule personne, alors ma solution était la suivante:

  1. Ajout d'un filtre pour correspondre à l'un des éléments suivants et ajout des sujets que je voulais.
  2. L'action que je lui ai confiée consiste à définir la priorité la plus basse.
  3. Ensuite, j'ai ajouté un nouveau filtre pour correspondre à tous les éléments suivants: la priorité est la plus basse et from contient (l'adresse e-mail à partir de laquelle je voulais filtrer).
  4. L'action que j'ai définie était de déplacer vers un certain dossier.

Une chose dont vous devez vous assurer est que le premier déposant est plus haut sur la liste afin qu'il soit exécuté en premier. Je sais que ce n'est pas la solution la plus élégante mais elle peut être étendue pour s'adapter à vos besoins.

Angel Delgado
la source
3

Je n'arrive pas à trouver une bonne extension pour le faire, mais la barre d'outils de recherche rapide fonctionnerait aussi bien si vous recherchez simplement dans un seul dossier.

Par exemple - si je voulais créer des critères pour tous les messages de Tommy et Billy mais pas ceux avec Fwd dans le sujet, ainsi que les messages de Sandra, y compris vers l'avant, je mettrais en place une recherche (en utilisant la barre d'outils de recherche rapide avec elle réglée pour rechercher par expression):

((de: Tommy OU de: Billy) ET -sujet: Fwd) OU (de: Sandra)

Cependant, avec plusieurs dossiers, cela n'est pas possible.

J

JDB
la source
Belle remarque. Dommage que cette fonctionnalité ne soit pas disponible dans le module des règles de filtrage.
Piotr Dobrogost
2

Avec FiltaQuilla, et certaines actions / règles javascript, c'est faisable. Cependant, voici un exemple avec quelques modifications à la source FiltaQuilla afin de simplifier le processus.

L'exemple ici fera trois étapes de filtrage: le marquage - qui classe uniquement les e-mails. Ensuite, la modification - cela fait un calcul logique et modifie l'objet ou les en-têtes de l'e-mail. Et, action - faire l'action réelle. Chacune des étapes impliquera la modification des filtres dans la boîte de dialogue du filtre Thunderbird normalement, mais avec des options ajoutées par FiltaQuilla. Les étapes 1 et 2 enregistrent leurs résultats dans un champ d'en-tête d'e-mail nouvellement ajouté, et les étapes 2 et 3 utilisent les résultats dans le champ pour effectuer une logique avant les actions normales.

Pas:

Installer FiltaQuilla

Il semble que de nombreuses fonctions ne fonctionnent qu'avec Thunderbird 3.1. Mettez donc à niveau vers TB 3.1 en premier. Installez ensuite FiltaQuilla.

Dans l'onglet de préférence FiltaQuilla, activez "Suffixe pour le sujet" et "Action Javascript".

Modifier la source FiltaQuilla

Modifiez "[email protected]/content/filtaquilla.js" dans le répertoire d'extension pour qu'il ressemble à ceci:

// Suffix to subject
self.subjectSuffix =
{
  ...
  apply: function(aMsgHdrs, aActionValue, aListener, aType, aMsgWindow)
  {
    for (var i = 0; i < aMsgHdrs.length; i++)
    {
      var msgHdr = aMsgHdrs.queryElementAt(i, Ci.nsIMsgDBHdr);
      ////var appSubject = _mimeAppend(aActionValue, msgHdr.subject, false);
      ////msgHdr.subject = appSubject;
      var headerName = "mykeywords";
      var headerValue = msgHdr.getStringProperty(headerName);
      msgHdr.setStringProperty(headerName, headerValue + " " + aActionValue);
      headerValue = msgHdr.getStringProperty(headerName);
        // Cu.reportError("chg : " + headerName + " : " + headerValue);
    }
  },

Le code modifie l'action d'origine de "Suffix to Subject" en ce qu'il ajoutera les chaînes suffixées dans un nouvel en-tête nommé "mykeywords". Ce nouveau champ d'en-tête sera utilisé pour conserver le résultat des deux premières étapes de filtrage sous forme de mots de chaîne.

Cette modification du code source consiste à réutiliser l'action "Suffixe" car généralement le suffixe à un sujet n'est pas très utile. Ainsi, la réutilisation de ses tripes internes n'affecterait pas beaucoup l'utilisabilité de FiltaQuilla. Si ce n'est pas le cas, une demande officielle de fonctionnalité doit être envoyée au créateur de FiltaQuilla pour ajouter la fonctionnalité souhaitée, ou vous devrez écrire un peu plus de code Javascript dans la condition de filtre en tant que condition Javasctipt.

Créer des règles de filtrage pour le marquage

Un exemple est de créer une série de règles, chacune n'aura qu'une seule action: "Suffixe au sujet", mais les mots suffixés identifieront chacun le résultat obtenu. Par exemple, classifiez les e-mails en fonction de leur provenance en suffixant les mots "entreprise-A", "entreprise-B", ..., etc. N'oubliez pas que ces mots "entreprise-A", "entreprise-B", etc. ., sera concaténé dans le champ d'en-tête "mykeywords".

Placez ces règles au début de la liste des règles de filtrage.

Créer des règles de filtrage pour la modification logique

Dans la zone de liste déroulante des règles de filtrage, utilisez "Personnaliser" pour ajouter "mes mots-clés" à la liste. Choisissez ensuite "mykeywords contains company-" comme condition dans la boîte de dialogue de filtrage.

Choisissez "Javascript Action" dans la section action. Ajoutez du code comme celui-ci:

for (let index = 0; index < msgHdrs.length; index++)
{
  let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);
  let s = hdr.getStringProperty("mykeywords");
  let v = s.split("company-"); /* result words are in v[] now */
  let r = ""; /* logic conversion result */
  let cnt = 0;
  if ( v != undefined && v.length != undefined && v.length > 0) {
    let lastVN = 0;
    for(var i=v.length -1; i>=0; i--) {
      let ss = v[i];
      if ( ss.length > 1 ) {
          ss = ss.substring(0);
          /* convert company A into VIP, B into NORMAL, C into IGNORE. 
           * Assume the marking section starts with A,B, then C thus 
           * C gets parsed first, then A and B. 
           */
          if (ss.search(/A/) == 0)  { ss = "V"; lastVN = 1; } /*VIP*/
          else if (ss.search(/B/) == 0 ) { ss = "N"; lastVN = 1; } /*NORMAL*/
          else if (ss.search(/C/) == 0   ) { ss = "IGNORE"; }
          /* prepend subject line */
          if ( cnt == 0 ) { r = ss + "] ";
          } else { if (lastVN == 0) r = ss + " " + r; else  r = ss + r;  }
          cnt ++;
      }
    } /* for(var i=v.length -1; */
    if ( cnt > 0 ) { r = "[" + r; }
  } /* if ( v != undefined && */
  hdr.subject = r + hdr.subject;
} /* for (let index = 0; */

À ce stade, tous les résultats de marquage sont accessibles par le script à partir du champ d'en-tête "mykeywords". Il suffit d'analyser la chaîne, puis toute logique peut être appliquée après l'analyse pour obtenir le résultat logique que vous souhaitez. Par exemple, vous pouvez appliquer si "A" et "B", ajouter "résultat-AB" à "mes mots-clés", etc. ".

L'exemple ci-dessus montre également que le "[VN IGNORE]" peut être ajouté à la ligne d'objet pour indiquer laquelle des trois sociétés a été impliquée dans l'e-mail d'objet.

Créer des règles de filtrage pour l'action

Créez maintenant la règle d'action basée sur les valeurs contenues dans "mykeywords". Ce ne seront que des paramètres normaux.

Remarques:

Le FiltaQuilla prend en charge les javascripts dans la section condition. Ainsi, si vous ne souhaitez pas modifier le code source de l'extension, vous devrez écrire un peu plus de code dans la section condition de la boîte de dialogue de filtrage. Avec ce code, tout calcul logique peut également être effectué.

Consultez le site FiltaQuilla pour plus d'informations.

minghua
la source
1

Vous pourriez peut-être utiliser des balises pour chaque sous-clause de l'expression. if ((from: Tommy OR from: Billy) then tag with "TomAndBilly" tag Then filter looking for not subject: Fwd AND tag TomAndBilly. Je n'ai pas essayé, je suppose que cela ne fonctionnera pas si TB ne fonctionne pas filtrer plus d'une fois. Peut-être pouvez-vous aussi forcer à aller plus d'une fois en renvoyant le courrier vers différents dossiers, ou même des comptes (mais alors ça commence à devenir vraiment moche).

J'ai entendu dire qu'un meilleur marquage était dû à TB3, mais cela ne semble pas évident dans l'interface utilisateur.

Sam Brightman
la source