Книга: Сетевые средства Linux
Создание рецепта
Разделы на этой странице:
Создание рецепта
Создание рецепта может показаться очень сложной задачей, в особенности для тех, кто не знаком с регулярными выражениями. Формат рецепта имеет следующий вид:
: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
. Чтобы указать на то, что в строке может присутствовать одна из двух последовательностей символов, надо разделить эти последовательности символом |
. При необходимости вы можете задать выбор более чем из двух альтернативных вариантов, использовав несколько символов |
.
• (последовательность)*
. Это выражение похоже на a*
, но оно означает многократное повторение не одного символа, а целой последовательности.
• [символы]
. Набор символов, помещенных в квадратные скобки, означает, что в строке должен присутствовать любой из них. Например, выражению [aeiou]
соответствуют символы а
, е
, i
, о
или u
. Если два символа разделены дефисом (-
), они задают диапазон символов. Например, выражению [m-q]
соответствуют символы m
, n, о
, p или q
.
• . Обратная косая черта отменяет специальное значение символа. Например, выражение .
соответствует обычной точке.
Дополнительную информацию о регулярных выражениях вы найдете на страницах справочной системы, посвященных Procmail. Объединяя обычный текст и специальные символы, вы можете создавать достаточно сложные выражения. Как было сказано ранее, условия в составе рецепта могут занимать одну или несколько строк. В большинстве случаев используются условия, состоящие из одной строки. Если условия занимают несколько строк, письмо соответствует рецепту в том случае, если оно соответствует каждому из условий. Если условия отсутствуют, рецепту соответствует любое сообщение.
В составе условий могут быть использованы дополнительные символы, указывающие на то, что рецепт должен быть интерпретирован специальным образом. Некоторые из них описаны ниже.
• !
. Данный символ инвертирует результат сравнения. Если условие начинается с символа !
, то, для того, чтобы письмо соответствовало рецепту, оно не должно соответствовать данному условию. Например, вы можете создать рецепт, которому соответствуют все сообщения, кроме адресованных пользователю postmaster
.
• <
. Условие применяется в том случае, если длина сообщения меньше указанного числа байтов.
• >
. Условие применяется в том случае, если длина сообщения больше указанного числа байтов.
Действие
Действие в составе рецепта занимает одну строку и указывает Procmail, как следует обрабатывать сообщение. Простое действие лишь задает имя файла, в который Procmail должен поместить сообщение. Действия Procmail хорошо сочетаются с sendmail
, Exim, Postfix и другими серверами, использующими формат mbox
. Если же вы работаете с qmail
или другим сервером, поддерживающим формат maildir
, описание действия Procmail необходимо завершать косой чертой (/
), которая указывает на то, что Procmail должен сохранить сообщение в формате maildir
. Procmail также поддерживает еще один формат хранения сообщений, для использования которого описание действия должно заканчиваться косой чертой и точкой.
Помимо записи писем в папки, Procmail также может выполнять другие действия, для описания которых в начале строки указываются перечисленные ниже символы.
• !
. Если описание действия начинается с восклицательного знака, Procmail интерпретирует содержимое строки как список почтовых адресов, по которым следует перенаправить сообщение. Вы можете использовать данную возможность для автоматического создания сообщений, предназначенных для группы пользователей.
• |
. В оболочках UNIX вертикальная черта используется для организации конвейерной обработки данных. В Procmail данный символ имеет аналогичное назначение. Если описание действия начинается с вертикальной черты, Procmail запускает указанную программу и передает ей сообщение для обработки. Вы можете использовать данную возможность для выполнения более сложных действий над сообщениями.
• {
. Открывающая фигурная скобка является признаком начала блока. В состав блока могут входить рецепты, которые применяются только к сообщениям, соответствующим условиям включающего рецепта. (Включающий рецепт является рецептом без доставки. Если сообщение не соответствует ни одному из включаемых рецептов, оно не доставляется.) Такая возможность может использоваться в том случае, если у вас есть несколько рецептов и вы хотите применять их только при выполнении некоторых предварительных условий. Например, вложенные рецепты можно использовать для распознавания рекламных сообщений по некоторым признакам, каждый из которых не позволяет принять окончательное решение о типе письма. Признаком окончания блока является закрывающая фигурная скобка.
В каждом из рецептов может содержаться лишь одно действие. Если вы хотите, чтобы над сообщением выполнялось несколько операций, вам следует создать сценарий и передать ему сообщение для обработки. При этом вам необходимо следить за тем, чтобы сценарий прочитал все сообщение, в противном случае Procmail проверит сообщение с помощью других правил. В некоторых случаях в составе рецепта задается флаг с
, указывающий на то, что операции должны выполняться над копией сообщения. При этом в зависимости от действий, производимых над сообщением, оно может быть доставлено несколько раз.
- Создание файлов с блокировкой
- Создание свободно позиционируемых элементов
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции
- Создание корня документа:
- Создание многофайловой базы данных
- Создание форм с несколькими вкладками
- Создание ярлыков в специальных папках