Как, наверное, многие из вас знают, 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/
Добавить комментарий