В Thunderbird можно выбрать « Совпадение всех следующих» или « Совпадение любого из следующих» для заданного набора правил фильтрации. Невозможно свободно смешивать логические операторы OR и AND для создания более сложных критериев, таких как ((A и B) OR (C и D)) AND E.
Есть ли какой-нибудь плагин, позволяющий добиться вышеуказанного?
4 ответа
Мне нужно было отфильтровать кучу разных предметов от одного человека, поэтому мое решение было таким:
- Добавлен фильтр для соответствия любому из следующих, и добавил любые предметы, которые я хотел.
- Действие, которое я установил для этого, - установить приоритет на самый низкий.
- Затем я добавил новый фильтр, чтобы он соответствовал всем следующим условиям: приоритет - самый низкий, а из содержимого - (адрес электронной почты, с которого я хотел отфильтровать).
- Действие, которое я установил, состояло в том, чтобы перейти к определенной папке.
Одна вещь, в которой вы должны убедиться, это то, что первый файлер находится выше в списке, поэтому он выполняется первым. Я знаю, что это не самое элегантное решение, но оно может быть расширено в соответствии с вашими потребностями.
Кажется, я не могу найти подходящее расширение для этого, но панель быстрого поиска будет работать так же хорошо, если вы будете искать только в одной папке.
Например - если бы я хотел создать критерии для всех сообщений от Томми и Билли, но не для сообщений с Fwd в теме, а также сообщений от Сандры, включая переадресацию, я бы настроил поиск (используя панель быстрого поиска с установленным для поиска по выражению):
((из: Томми ИЛИ из: Билли) И -субъект: Fwd) ИЛИ (из: Сандра)
Однако с несколькими папками это невозможно.
J
С 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 для получения дополнительной информации.
Возможно, вы могли бы использовать теги для каждого подпункта выражения. if ((from:Tommy ИЛИ from:Billy) тогда пометьте тегом "TomAndBilly". Затем фильтр ищет не тему:Fwd И тег TomAndBilly. Я не пробовал это, я думаю, это не сработает, если туберкулез не будет фильтроваться более одного раза. Возможно, вы также можете заставить его идти несколько раз, перенаправляя почту в разные папки или даже на учетные записи (но тогда это начинает становиться действительно уродливым).
Я слышал, что в TB3 появилось лучшее тегирование, но в пользовательском интерфейсе это не кажется очевидным.