Управление почтовым трафиком
Что делает Procmail?
Procmail это небольшой почтовый процессор. В сущности, как только Sendmail или другой MTA доставит почту в локальные почтовые ящики, вы можете использовать MUA для обработки почты в вашей паке inbox [Входящие]. Вы сохраняете некоторые сообщения в различные папки; другие вы удаляете; вы перенаправляете какие-то сообщения другим интересующимся абонентам; на какие-то отвечаете; и так далее. Выполнение этих задач в MUA является ручным и интерактивным процессом, и в своей массе отнимает много времени.
Procmail это программа, которая может выполнять эти задачи автоматически, как только вы укажете ей правила работы. Естественно, когда вы отвечаете на письмо своей мамы, то требуется оказать некое персональное внимание, но для большого класса других сообщений можно заранее точvно сказать что нужно сделать при получении данного сообщения. Правила, которые управлют автоматической обработкой писем, могут реагировать на специфические заголовочные поля, на определенное содержимое в теле сообщения или даже основываться на результатах обращения к более специфичным и специализированным внешним программам, таким как статистический спам-фильтр.
Включение Procmail
Procmail вероятно уже установлен вместе с вашим дистрибутивом Linux. Если нет, то вы можете получить архив с исходными текстами на procmail.org (смотри Ресурсы). В момент написания данного текста, последней версией была 3.22. Вы можете также установить Procmail как бинарный файл, используя систему установки пакетов вашего дистрибутива Linux (например, в Debian: apt-get install procmail). Сборка из исходных текстов является стандартной: make install. Все, что необходимо Procmail для работы -- это бинарный файл procmail и конфигурационный файл ~/.procmailrc (или, возможно, глобальный файл /etc/procmailrc).
Кроме установки Procmail, в первую очередь вам необходимо настроить вашу локальную почтовую систему для использования Procmail. Старый алгоритм обработки почты посредством Procmail заключается в использовании файла .forward; это все еще часто работает на уровне единичного пользователя. Обычно пользователь создает файл ~/.forward, содержащий нечто вроде этого:
|/usr/local/bin/procmail
Этот файл перенаправляет все входящие сообщения к Procmail. Однако, более удобный и распространенный способ использования Procmail - это настроить ваш MTA передавать ваши письма напрямую Procmail. В Sendmail, это выполняется путем включения функции local_procmail, поместив в ваш файл sendmail.mc следующее:
FEATURE(`local_procmail', `/usr/bin/procmail', `procmail -Y -a $h -d $u')
При включении Procmail он считывает файл ~/.procmailrc, содержащий набор правил, которые затем используются при обработке данного сообщения. Procmail -- это не демон, а инструмент обработки текста, принимающий электронные сообщения по одному через STDIN.
Правила в ~/.procmailrc
По сути файл настроек Procmail -- это просто набор правил, заданных в виде регулярных выражений. Вы может также определить в нем переменные среды в том же стиле, как это делается в скриптах командной оболочки. Правила выполняются строго в указанном порядке, но могут использоваться флаги для выполнения каких-то действий, только если предыдущее вернуло (A) или (E). Некоторые правила Procmail являются правилами доставки, а другие таковыми не являются; после выполнения подходящего правила обработка данного сообщения завершается, если только не указан флаг c для явного продолжения обработки. Вероятно, наиболее частым действием в списке правил является сохранение сообщений в именных почтовых ящиках, но вы можете также перенаправлять сообщения в другую программу или пересылать сообщения целому списку адресатов.
Правило обычно начинается с указания блокировки (возможно с указанием конкретного файла блокировки, в его отсутствие файл выбирается автоматически) и нескольких флагов, затем следует некоторое количество условий и наконец ровно одна команда на выполнение. Например:
:0 [flags] [ : [locallockfile] ]
<zero or more conditions (one per line)>
<exactly one action line>
Отдельного упоминания заслуживают флаги H для соответствия заголовкуB для соответствия телу. Шаблоны обычно не чувствительны к регистру, но флаг D позволяет включить чувствительность к регистру принудительно.
Если условие начинается с *, то все после этого символа является регулярным выражением egrep. В противном случае, если строка начинается с < или >, то проверяется размер сообщения больше оно или меньше указанного числа байт. Префикс $ разрешает подстановки командной оболочки.
Команда, являющаяся просто именем файла, сохраняет сообщение в этом почтовом ящике. Используйте специальные псевдо-файлы /dev/null для удаления сообщения. Символ "вертикальная черта" (|) отправляет сообщение в другую программу, такую как почтовая утилита digest-splitting, распространяемая вместе с Procmail. Префикс в виде восклицательного знака (!), используемый внутри команды, пересылает сообщение (внутри условия он играет роль отрицания). Несколько примеров:
Листинг 6. Пример файла ~/.procmailrc
:0:
* ^Subject:.*Digest # split digests and save parts
* ^From:.*foo-digest
|formail +1 -ds cat >>mailing_lists_mailbox
:0:
* !(To|Cc).*mertz@gnosis.cx # my main account here
* !(To|Cc).*david.mertz@gmail.com # I get mail from here
* !From.*gnosis\.cx # I trust gnosis not to spam
* !From.*list.*@ # don't trash mailing lists
* !From.*good-buddy # sometimes Bcc's me mail
spam
:0:
* ^Subject.*[MY-LIST] # redistribute MY-LIST messages
! member@example.com, member2@example.net, member3@example.edu
:0:
* ^Cc.*joe@somewhere.org # save to both inbox and JOE mbox
{
:0 c
$DEFAULT
:0
JOE
}
|
|