В конфигурационном файле Procmail содержатся записи трех типов.
• Комментарии. Как и во многих других конфигурационных файлах, строки, содержащие комментарии, начинаются с символа
#
.
• Записи, определяющие переменные окружения. В процессе работы Procmail использует значения переменных окружения, например
$HOME
(расположение рабочего каталога пользователя) и
$MAILDIR
(каталог, в котором содержатся пользовательские папки для хранения почтовых сообщений). Значения переменных окружения устанавливаются в конфигурационном файле так же, как и в оболочке. Например,
запись
MAILDIR = $HOME/Mail
задает для переменной окружения
$MAILDIR
значение, указывающее на подкаталог
Mail
, находящийся в рабочем каталоге пользователя.
• Рецепты. Правила фильтрации Procmail называются рецептами (recipe). Основная работа по построению фильтра сводится к созданию рецепта. Каждый рецепт содержит правила, определяющие обработку сообщения, соответствующего некоторому регулярному выражению. Таким образом, полный набор правил состоит из многих рецептов. Рецепты разделяются на две категории: рецепты с доставкой (delivering) и рецепты без доставки (nondelivering). Рецепты с доставкой ориентированы на включение сообщения в состав почтового ящика, блокирование сообщения или обработку его с помощью другой программы. Рецепты без доставки определяют вложенные рецепты, т.е. приводят к повторной обработке сообщения с помощью Procmail.
Описанные три типа записей могут располагаться в пределах конфигурационного файла в любой последовательности. Многие конфигурационные файлы Procmail начинаются с определения переменных окружения, за которыми следует набор рецептов. В процессе обработки поступающей почты Procmail сканирует письма и проверяет их на соответствие рецептам. Если письмо не соответствует ни одному рецепту, Procmail доставляет его в файл, определяемый посредством переменной
$DEFAULT
. Обычно это почтовый ящик, используемый по умолчанию, например
/var/spool/mail/имя_пользователя
.
Создание рецепта
Создание рецепта может показаться очень сложной задачей, в особенности для тех, кто не знаком с регулярными выражениями. Формат рецепта имеет следующий вид:
:0 [флаги] [:[файл_блокировки]]
[условия]
действие
Рецепт можно условно разбить на три части: идентификационную строку, условия и действие.
Идентификационная строка
Каждый рецепт начинается с символов
:0
. Цифра 0 не имеет специального значения, и рецептов, начинающихся с
:1
или больших номеров, не существует. После
:0
вы можете задать один или несколько флагов, которые изменяют поведение Procmail. Наиболее часто используются следующие флаги.
•
H
. Данный флаг указывает на то, что сравнению с шаблоном должны подвергаться заголовки сообщения. Этот флаг используется по умолчанию.
•
В
. Этот флаг задает сравнение тела сообщения с шаблоном.
•
D
. По умолчанию при сравнении с шаблоном не учитывается регистр символов. Флаг
D
отменяет это соглашение.
•
с
. Данный флаг указывает на то, что рецепт должен работать
с "копией" исходного сообщения. Его "оригинал" сохраняется для обработки другими рецептами.
•
w
. Этот флаг сообщает о том, что Procmail должен ожидать завершения действия, указанного в рецепте. Если действие не окончилось успешно, сообщение остается в очереди для обработки посредством других рецептов.
•
W
. Данный флаг действует подобно
w
, но подавляет сообщения об ошибках.
После флагов можно указать двоеточие и имя файла блокировки. Файл блокировки — это специальный файл, который сообщает о том, что в данный момент происходит работа с другим файлом. При наличии файла Procmail откладывает обработку сообщения до тех пор, пока этот файл не будет удален. Файл блокировки удобно использовать в тех случаях, когда в очереди содержится много сообщений; ,без него может возникнуть ситуация, когда сообщения, принятые одно за другим, будут записаны в неверном порядке. По умолчанию имя файла блокировки строится на основе имени файла, в который помещается почта (этот файл указывается в строке действия). Если в строке действия задается обработка сообщения другой программой, вы можете указать имя файла блокировки после двоеточия.
Условия
Условия в составе рецепта состоят из любого (возможно, нулевого) числа строк, обычно начинающихся с символа
*
. Как правило, в составе условий задаются регулярные выражения — строки символов, с которыми Procmail сравнивает входные данные (заголовок и тело сообщения). Большинство символов используется литерально, но некоторые символы имеют специальные значения. Специальные символы и выполняемые ими действия описаны ниже.
•
^
. Указывает на начало строки. Этот символ указывается во многих условиях Procmail после символа
*
.
•
$
. Данный символ указывает на конец строки.
•
.
. Точке соответствует любой символ, кроме символа новой строки. Например, выражению удовлетворяют
dog
,
dig
,
dug
и любая другая трехсимвольная последовательность, которая начинается с
d
и заканчивается
g
.
•
а*
. Данному выражению соответствует любое (в том числе нулевое) число символов, указанных перед звездочкой, следующих друг за другом. Очевидно, что вместо а вы можете подставить любой символ. Например, если вам надо найти последовательность, начинающуюся с цифр
802
, за которыми следует произвольное количество неизвестных символов, а затем
1618
, то сделать это поможет выражение
802.*1618
.
•
a+
. Это выражение выполняет те же действия, что и
a*
, но количество символов в последовательности не может быть нулевым.
•
a?
. Данное выражение означает, что указанный символ может отсутствовать.
•
последовательность1|последовательность2
. Чтобы указать на то, что в строке может присутствовать одна из двух последовательностей символов, надо разделить эти последовательности символом
|
. При необходимости вы можете задать выбор более чем из двух альтернативных вариантов, использовав несколько символов