13

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

4 ответа4

5

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

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

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

3

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

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

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

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

J

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 содержит компанию-» для условия в диалоговом окне фильтра.

Выберите "Действие 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 ИЛИ from:Billy) тогда пометьте тегом "TomAndBilly". Затем фильтр ищет не тему:Fwd И тег TomAndBilly. Я не пробовал это, я думаю, это не сработает, если туберкулез не будет фильтроваться более одного раза. Возможно, вы также можете заставить его идти несколько раз, перенаправляя почту в разные папки или даже на учетные записи (но тогда это начинает становиться действительно уродливым).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .