Как объединить правила фильтрации в фильтрах сообщений в Thunderbird для создания более сложных критериев фильтрации?

13

В Thunderbird можно выбрать « Совпадение всех следующих» или « Совпадение любого из следующих» для заданного набора правил фильтрации. Нет никакого способа свободно смешивать логические операторы ИЛИ и И для создания более сложных критериев, таких как ((А И В) ИЛИ (С И D)) И Е.
Есть ли какой-нибудь плагин, позволяющий достичь вышеуказанного?

Петр Доброгост
источник

Ответы:

5

Мне нужно было отфильтровать кучу разных предметов от одного человека, поэтому мое решение было таким:

  1. Добавлен фильтр, чтобы соответствовать любому из следующих, и добавил любые предметы, которые я хотел.
  2. Действие, которое я установил, - установить приоритет наименьший.
  3. Затем я добавил новый фильтр, чтобы он соответствовал всем следующим условиям: приоритет - самый низкий, а из содержимого - (адрес электронной почты, с которого я хотел отфильтровать).
  4. Действие, которое я установил, состояло в том, чтобы перейти к определенной папке.

Одна вещь, в которой вы должны убедиться, это то, что первый файлер находится выше в списке, поэтому он выполняется первым. Я знаю, что это не самое элегантное решение, но оно может быть расширено в соответствии с вашими потребностями.

Анхель Дельгадо
источник
3

Кажется, я не могу найти подходящего расширения для этого, но панель быстрого поиска будет работать так же хорошо, если вы будете искать только в одной папке.

Например - если бы я хотел создать критерии для всех сообщений от Томми и Билли, но не для сообщений с Fwd в теме, а также сообщений от Сандры, включая переадресацию, я бы настроил поиск (используя панель быстрого поиска с установленным для поиска по выражению):

((из: Томми ИЛИ из: Билли) И -субъект: Fwd) ИЛИ (из: Сандра)

Однако с несколькими папками это невозможно.

J

JDB
источник
Хорошее замечание. Жаль, что эта функция недоступна в модуле правил фильтрации.
Петр Доброгост
2

С FiltaQuilla и некоторыми действиями / правилами javascript это выполнимо. Однако здесь приведен пример с некоторыми модификациями исходного кода FiltaQuilla для упрощения процесса.

В приведенном здесь примере выполняется три этапа фильтрации: маркировка, которая классифицирует только электронные письма. Затем изменение - это делает некоторые логические вычисления и изменяет тему письма или заголовки. И, действие - делать фактическое действие. Каждый из этапов будет включать редактирование фильтров в диалоге фильтров Thunderbird в обычном режиме, но с добавленными опциями FiltaQuilla. Этапы 1 и 2 сохраняют свои результаты во вновь добавленном поле заголовка электронного письма, а этапы 2 и 3 используют результаты в поле, чтобы выполнить некоторую логику перед обычными действиями.

шаги:

Установить FiltaQuilla

Похоже, многие функции работают только с Thunderbird 3.1. Таким образом, сначала обновите до TB 3.1. Затем установите FiltaQuilla.

На вкладке настроек FiltaQuilla включите «Суффикс к теме» и «Действие Javascript».

Изменить источник FiltaQuilla

Измените «filtaquilla@mesquilla.com/content/filtaquilla.js» в каталоге расширений так, чтобы он выглядел следующим образом:

// 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);
    }
  },

Код изменяет исходное действие «Suffix to Subject» на то, что он добавляет строки с суффиксами в новый заголовок с именем «mykeywords». Это новое поле заголовка будет использоваться для сохранения результата первых двух этапов фильтрации в виде строковых слов.

Это изменение исходного кода заключается в повторном использовании действия «Суффикс», поскольку суффиксы к теме обычно не очень полезны. Таким образом, повторное использование его внутренних функций не сильно повлияет на удобство использования FiltaQuilla. Если этого не сделать, официальный запрос функции должен быть отправлен в FiltaQuilla, чтобы добавить нужную функцию, или вам нужно будет написать немного больше кода Javascript в условии фильтра как условие Javasctipt.

Создать правила фильтра для маркировки

Примером является создание серии правил, каждое из которых будет иметь только одно действие: «Суффикс к теме», но каждое суффиксное слово будет идентифицировать, какой результат он получил. Например, классифицируйте электронные письма в соответствии с тем, откуда они, добавив слова «компания-А», «компания-Б», ... и т. Д. Помните, что эти слова «компания-А», «компания-Б» и т. Д. ., будет объединен в поле заголовка "mykeywords".

Поместите эти правила в начало списка правил фильтра.

Создать правила фильтра для логической модификации

В выпадающем поле заголовка поля правил фильтрации используйте «Настроить», чтобы добавить «mykeywords» в список. Затем выберите «mykeywords содержит company-» для условия в диалоговом окне фильтра.

Выберите «Действие Javascript» в разделе действий. Добавьте код, подобный этому:

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; */

На этом этапе все результаты маркировки доступны для скрипта из поля заголовка «mykeywords». Просто проанализируйте строку, и после синтаксического анализа может быть применена любая логика для достижения желаемого логического результата. Например, вы можете применить «A» и «B», добавить «result-AB» к «mykeywords» и т. Д. Затем на следующем этапе проверить «mykeywords содержит result-AB» для фактического значения «A и B». ».

Вышеприведенный пример также показывает, что «[VN IGNORE]» может быть добавлен перед строкой темы, чтобы указать, какая из трех компаний участвовала в теме электронного письма.

Создать правила фильтра для действий

Теперь создайте правило действия на основе значений, содержащихся в «mykeywords». Это будут просто нормальные настройки.

Примечания:

FiltaQuilla поддерживает JavaScript в разделе условий. Таким образом, если вы не хотите изменять исходный код расширения, вам нужно написать немного больше кода в разделе условий диалогового окна фильтра. С этим кодом можно выполнять любые логические вычисления.

Проверьте сайт FiltaQuilla для получения дополнительной информации.

Минхуа
источник
1

Может быть, вы могли бы использовать теги для каждого подпункта выражения. if ((from: Tommy OR from: Billy) затем пометьте тегом "TomAndBilly". Затем фильтр будет искать не тему: Fwd AND tag TomAndBilly. Я не пробовал этого, думаю, это не сработает, если TB не сработает фильтруйте более одного раза. Может быть, вы также можете заставить его идти несколько раз, перенаправляя почту в разные папки или даже на учетные записи (но тогда это начинает становиться действительно уродливым).

Я слышал, что в TB3 появилось лучшее тегирование, но в пользовательском интерфейсе это не кажется очевидным.

Сэм Брайтман
источник