ImapFilter — мощный инструмент для сортировки почты

от автора

По работе мне приходится ежедневно работать с большим количеством писем, и чтобы не упускать из виду важную информацию, их нужно сортировать. Первое время с этой задачей вполне себе справлялся настроенный Thunderbird на рабочей машине, но хотелось проверять почту не только на работе, но и дома, и еще где-нибудь — словом, в любом удобном месте при наличии желания и возможности. Стали появляться мысли о некоем серверном решении. Казалось бы — «все уже украдено до нас» (с) — связка fetchmail+procmail+(exim/postfix/sendmail и пр.)+mutt вполне себе рабочая и неплохо себя зарекомендовала, но мне не нужны были все возможности столь мощных почтовых программ, хотелось минимализма, простоты и функциональности.

Как, наверное, многие из вас знают, mutt изначально умеет работать с почтовым сервером по протоколу imap, и замечательно проверяет почту своими силами (т.е. fetchmail нам уже не нужен), так же замечательно он умеет и отправлять почту через сторонний smtp-сервер (т.е. MTA тоже не нужен), остается только решить проблему фильтрации почты. И тут на помощь приходит он — imapfilter.

Imapfilter, как очевидно из названия, фильтрует почту, соединяясь с почтовым сервером по протоколу IMAP. Возможности у этой программы воистину безграничные, с ее помощью можно делать практически все (создание/удаление/изменение папок, фильтрация/копирование/перемещение/удаление писем, установка различных флагов, сортировка и поиск писем и т.д.).

Конфигурационный файл программы представляет собой набор правил, записанных на языке lua (после просмотра типовых примеров конфига и изучения мануала сложностей с написанием собственных правил быть не должно).

Итак, небольшая инструкция по базовой настройке.

Предположим, что у нас debian-подобная система. Ставим пакет imapfilter:

$ sudo apt-get install imapfilter 

И после установки создаем в своей домашней директории папку .imapfilter, а в ней — конфигурационный файл с названием «config.lua»:

$ mkdir ~/.imapfilter $ touch ~/.imapfilter/config.lua 

Теперь приступим к редактированию конфига. В качестве редактора пусть выступает стандартный Nano:

$ nano ~/.imapfilter/config.lua 

Все, что начинается с "—" в конфигурационном файле считается комментариями и, соответственно, не обрабатывается.

-- Таймаут (в секундах), в течение которого нужно ждать ответ от сервера -- timeout = 120 -- Сообщаем, что мы хотим вручную указать имена почтовых ящиков (читай, imap-каталогов) -- options.namespace = false  -- Настройка учетной записи -- account_name = IMAP {                       server = 'mailserver.ru',                       username = 'your_login',                       password = 'your_pass',    } 

Сюда же, если нужно, можно добавить поля ‘ssl’ и ‘port’, заполнив их необходимыми значениями.
Далее определяем список папок, и проверяем текущий статус каталога с входящей почтой:

mailboxes, folders = account_name:list_all() account_name:check_status() 

Опция «list_all()» вернет список всех доступных каталогов и подкаталогов в Вашем почтовом ящике, а опция «check_status()», соответственно, предоставит информацию о том, сколько в Вашем ящике всего писем, сколько отправленных, сколько непрочитанных (перед началом фильтрации необходимо убедиться, что у Вас уже созданы все необходимые каталоги, по которым Вы будете раскладывать почту, либо можно воспользоваться функцией «create_mailbox» для создания нового каталога).
Затем мы определим переменную «results», которую будем использовать в дальнейшем для фильтрации почты:

results = account_name.INBOX:select_all() 

Теперь можно переходить непосредственно к правилам. Грубо говоря, обычное правило будет выглядеть примерно так:

res = results:contain_subject('hello') res:move_messages(account_name.folder) 

где:

  • res — произвольное имя переменной, которая будет отвечать за письма, подходящие по условию;
  • results:contain_subject(‘hello’) — здесь осуществляется собственно процесс фильтрации;
  • res:move_messages(account_name.folder) — действие, которое будет выполнено над письмами.

Можно фильтровать письма по отправителю (contain_from), по получателю (contain_to), по теме (contain_subject), по полю «Копия» (contain_cc), по размеру (is_larger и is_smaller), по дате (is_older, например, если письмо старше какого-то определенного количества дней) и по куче других параметров (см. ссылку внизу страницы).

После фильтрации письма можно копировать (copy_messages), перемещать (move_messages), помечать как прочитанное/непрочитанное/на удаление и пр., и удалять (delete_messages)

Ну и в качестве примера, рассмотрим случай, когда письма от пользователя user@domain.ru будут копироваться в папку «user» в каталоге «Inbox», письма с темой «Hello, world» будут перемещаться в папку «spam», а все письма в папке work, которые старше 10 дней, будут удалены.

res = results:contain_from('user@domain.ru') res:copy_messages(account_name.user) -- res = results:contain_subject('Hello, world') res:move_messages(account_name.spam) -- old = account_name.work:is_older(10) account_name.work:delete_messages(old)  

В процессе фильтрации можно использовать несколько условий одновременно, это реализуется с помощью логических операторов: "+" (логическое «ИЛИ»), "*" (логическое «И») и "-" (логическое «НЕ»):

res = results:contain_subject('Hello, world')+       results:contain_from('user@domain.ru') res:move_messages(account_name.spam) 

Думаю, дальнейшая аналогия понятна. Еще Imapfilter может работать с подкаталогами в Вашем почтовом ящике (например, Inbox/work/1 или Inbox/work/2). В этом случае при выполнении действия над письмом запись пути к этому подкаталогу будет немного другой:

res:move_messages(account_name['work/1'], results) 

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

$ chmod 700 ~/.imapfilter $ chmod 600 ~/.imapfilter/config.lua 

После завершения всех настроек запускаем imapfilter в режиме отладки и записью лога со следующими ключами:

imapfilter -l logfile.log -d 

В домашней папке программы появится лог-файл с соответствующим названием, и файл с именем «Debug.*****», в котором будет вся информация по действиям программы — там можно посмотреть, какое правило и как сработало.

И, напоследок, добавим в crontab строку

* * * * * imapfilter 

чтобы наш фильтр запускался каждую минуту и красиво раскладывал почту по нужным папкам.

Здесь можно ознакомиться со всеми опциями и параметрами, которые доступны в конфигурационном файле.

На этом все, спасибо за внимание.

ссылка на оригинал статьи http://habrahabr.ru/post/159173/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *