Глобальные фильтры на аккаунты Thunderbird

Mozilla-thunderbird-logo

За долгие годы использования почтового клиента у меня накопилось большое количество фильтров в Thunderbird которые автоматически обрабатывают почту раскладывая её по каталогам, сохраняя файлы, формируя автоответы и т д. Фильтры в Thunderbird привязываются к конкретным папкам, что лично для меня создаёт неудобства с управлением. Например письмо от Васи Пупкина я хочу положить в папку Васи Пупкина независимо на какой из моих емейлов оно пришло. Поэтому я сделал один общий файл фильтров которые привязал ко всем папкам симлинками. А для того чтобы объединить их написал пару скриптов которые облегчили обработку суммарно нескольких мегабайт фильтров.

Прежде всего нужно закрыть Thunderbird.

На первом шаге получаем все фильтры которые у нас есть в один каталог и нумеруем их. Этот однострочный скрипт запускается из каталога выбранного профиля Thunderbird.

$ i=0; find . -name msgFilterRules.dat -print0 | tr -s '\000' '\n' | while read file ; do cp "${file}" "${HOME}/Filters_Thunderbird/${file##*/}.${i}.txt" ; i=$((i+1)); done

А этот awk скрипт с именем aparse.awk разворачивает (транспонирует) фильтры так чтобы в одной строке был один фильтр. Он также активирует все фильтры.

#
BEGIN {
 first=1
}
{
  if ($0 ~ /^name=/) { 
    if (first == 1) {printf "%s", $0; first=0} else {printf "\n%s", $0} 
  } else if ($0 ~ /^enabled=/) {
    printf "\t%s", "enabled=\"yes\""
  } else if ($0 ~ /^type=/) {
    printf "\t%s", $0
  } else if ($0 ~ /^action=/) {
    printf "\t%s", $0
  } else if ($0 ~ /^[ \t]*actionValue=/) {
    printf "\t%s", $0
  } else if ($0 ~ /^[ \t]*customId=/) {
    printf "\t%s", $0
  } else if ($0 ~ /^[ \t]*condition=/) {
    printf "\t%s", $0
  } else if ($0 ~ /^[ \t]*version=/) {
    printf "%s\n", "1a-version=\"9\""
  } else if ($0 ~ /^[ \t]*logging=/) {
    printf "%s\n", "1b-logging=\"yes\""
  } else {
    printf "0a--%s\n", $0
  }
}
END {
  printf "\n"
}

Здесь я использую маркеры “1a-” и “1b-” чтобы две строки всплыли после сортировки в верх файла. Маркер “0a–” используется чтобы в файле увидеть ошибки необработанных опций которые после сортировки также всплывут.

Теперь все фильтры сортируем, убираем дубликаты и удаляем наши маркеры и получаем общий файл:

$ for file in `ls -1 *.txt` ; do cat "${file}" | awk -f aparse.awk ; done | sort | uniq | sed -e '/^$/d' -e 's/^1a-//g' -e 's/^1b-//g' > aa-transponde.txt

Пролистываем его и проверяем вручную на предмет ошибок.
Если всё в порядке то формируем результирующий суммарный список фильтров для Thunderbird:

$ for file in `ls -1 *.txt` ; do cat "${file}" | awk -f aparse.awk ; done | sort | uniq | sed -e '/^$/d' -e 's/^1a-//g' -e 's/^1b-//g' | tr '\t' '\n' > msgFilterRules-All.dat

Затем копируем его куда-то в профиль Thunderbird создав каталог Filters и во все каталоги где ходим видеть эти фильтры создаём относительные софтлинки. Относительные для того чтобы потом почтовый профиль можно было всегда легко перемещать.

Позаботьтесь о бэкапе старых фильтров, так как опция -s создаёт симлинк, а -f удаляет одноимённый файл если он там был.

ln -sf ../../Filters/msgFilterRules-All.dat msgFilterRules-All.dat

Готово. Теперь можно запустить Thunderbird и проверить все фильты. Помните что теперь фильтры находятся в одном файле и все изменения будут отражаться на всех папках Thunderbird где созданы симлинки на него.

Все действия в статье проводятся на Linux но сам механизм создания общего файла фильтров подойдёт и для Windows в котором также есть возможность создавать линки на файлы.

Дополнено:

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

2 thoughts on “Глобальные фильтры на аккаунты Thunderbird”

  1. Добрый день!
    Подскажите, пожалуйста, есть ли возможность переноса фильтров из Thunderbird на одной машине в установленный Thunderbird на другой?
    Заранее благодарен!

  2. Добрый день, Максим.

    Да конечно, фильтры можно перенести.
    Они находятся в каталоге профиля пользователя Thunderbird
    Имя файла с фильтрами msgFilterRules.dat. Это текстовый файл который можно скопировать. Но копировать нужно на остановленном Thunderbird. Чтобы работающий TB не перезаписал его.

    В Linux для pop3 должно быть где-то здесь:
    /home/домашний каталог/.thunderbird/каталог профиля/Mail/каталог почтового аккаунта/msgFilterRules.dat
    Например так:
    /home/maxx_d/.thunderbird/wjqws89y.default/Mail/pop.mail.ru/msgFilterRules.dat

    В Windows для pop3 файл находится в каталоге пользователя.
    “C:\Users\maxx_d\Application Data\Thunderbird\Profiles\wjqws89y.default\Mail\pop.mail.ru\msgFilterRules.dat”
    В виндах до Vista каталога Users нет, а есть “My Documents”

    Причём файлы совместимы Linux< ->Windows только нужно концы строк заменить правильно.
    Я перносил свои фильтры с Windows на Linux.

    Переносить можно не только фильтры но и профиль целиком.

    Удачи!

Comments are closed.