Пример использования рецептов

Пример использования рецептов

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

Листинг 19.3. Пример конфигурационного файла Procmail

MAILDIR = $HOME/Mail

# Поиск рекламных сообщений. Проверка не затрагивает письма,

# адресованные пользователю postmaster или отправленные им

:0

*! (From|To) : . *postmaster

{

 : 0 В

 * .*301.*S.*1618 /dev/null

 :0

 * From: .*badspammer.net

 /dev/null

 :0

 * Subject:.*$$$

 /dev/null

}

# Проверка по ключевым словам rug и david и

# перенаправление писем адресату

:0 с

* From: . *david@pangaea.edu

* Subject: . *rug

! amy@threeroomco.com

# Сообщения списков рассылки помещаются в отдельную папку

:0:

* То: . *list@mailinglist .example .com

$MAILDIR/mailinglist

Листинг 19.3 иллюстрирует некоторые важные особенности рецептов Procmail.

• Вложенные рецепты. Рецепты, выполняющие блокировку спама, содержатся в со­ставе другого рецепта, в результате эти фильтры применяются только для тех сообщений, которые адресованы пользователям, отличным от postmaster. (Это достигается посредством оператора отрицания, указанного в условиях включающего рецепта.) Аналогичный результат можно получить, включив условие *! То: .*postmaster в состав каждого из фильтров, предназначенных для блокирования спама. В данном простом примере это может несколько сократить объем конфигурационного файла. В более сложных фильтрах при использовании вложенных рецептов объем файла уменьшается. Кроме того, применение вложенных фильтров уменьшает вероятность ошибки, так как некоторые условия при этом указываются однократно.

• Регулярные выражения. В листинге 19.3 содержатся три рецепта, предназначенные для фильтрации рекламных сообщений. Первый из них проверяет тело сообщения (на это указывает флаг В) на наличие строки, содержащей последовательности 301, S и 1618. Этот рецепт предназначен для перехвата писем, содержащих указание на раздел 301 и номер S.1618, которые часто используются спамерами для создания иллюзии официального сообщения. Второй из рецептов, предназначенных для фильтрации спама, блокирует все письма из домена badspammer.net, а третий фильтр блокирует сообщения, содержащие в поле Subject: последовательность $$$. Обратите внимание на использование обратной косой черты для отмены специального значения символов. Все три рассматриваемых здесь рецепта направляют сообщения в файл /dev/null, т.е. удаляют их. После копирования в файл /dev/null письма уже не могут быть восстановлены. Файл блокировки для этих рецептов не требуется, так как сообщения не сохраняются ни в одной папке.

• Копирование сообщений. Вместо того чтобы записывать сообщение в файл, второй рецепт, приведенный в рассматриваемом примере, передает его другому пользователю. На это указывают флаг с и восклицательный знак в начале описания действия. Сообщение должно удовлетворять двум критериям: отправителем его должен быть пользователь david@pangaea.edu, и оно должно содержать слово rug в поле заголовка Subject:. Если хотя бы одно из условий не выполняется, сообщение не копируется.

• Сортировка сообщений. Последний рецепт распределяет сообщения по папкам. Письма, адресованные list@mailinglist.example.com, помещаются в отдельную папку, расположенную в подкаталоге рабочего каталога пользователя, предназначенного для работы с почтой. Во многих списках рассылки поле заголовка сообщения используется для идентификации самого списка, а информация о получателе сообщения включается в поле То: заголовка конверта. Для того чтобы выбрать наиболее удобный способ распределения писем по папкам, вам следует выяснить, какие данные содержатся в заголовках писем, распространяемых посредством списков рассылки.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Пример использования

Из книги автора

Пример использования Данный раздел не является частью GPL. Здесь мы показываем комментарий с заявлением об авторских правах из программы GNU env:/* env - run a program in a modified environmentCopyright (C) 1986, 1991-2002 Free Software Foundation, Inc.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as


Пример использования слябового распределителя памяти

Из книги автора

Пример использования слябового распределителя памяти Давайте рассмотрим пример из реальной жизни, связанный с работой со структурами task_struct (дескрипторы процессов). Показанный ниже код в несколько более сложной форме приведен в файле kernel/fork.c.В ядре определена


Пример использования

Из книги автора

Пример использования В следующем примере сервер уведомляет Internet Explorer, что содержание документа не будет меняться в течение 1 часа (pre-check=3600) и что его можно загружать прямо из локального кэша. В случае же изменения страницы, если пользователь запросит ее по истечении 15


4.6. Пример построения диаграммы вариантов использования

Из книги автора

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


Простой пример использования сигнала SIGURG

Из книги автора

Простой пример использования сигнала SIGURG Теперь мы рассмотрим тривиальный пример отправки и получения внеполосных данных. В листинге 24.1[1] показана программа отправки этих данных.Листинг 24.1. Простая программа отправки внеполосных данных//oob/tcpsend01.c 1 #include "unp.h" 2 int 3 main(int


Простой пример использования функции select

Из книги автора

Простой пример использования функции select Теперь мы переделаем код нашего получателя внеполосных данных и вместо сигнала SIGURG будем использовать функцию select. В листинге 24.3 показана принимающая программа.Листинг 24.3. Принимающая программа, в которой (ошибочно)


4.5 Пример использования GParted для переразбивки винчестера

Из книги автора

4.5 Пример использования GParted для переразбивки винчестера В качестве подопытного кролика я буду использовать такую вот конфигурацию: Рис. 4.3: Пример начальной разметки винчестера. Рис. 4.3: Пример начальной разметки винчестера.Допустим, на первом диске стоит Windows а на


Пример использования парного программирования в одном из проектов

Из книги автора

Пример использования парного программирования в одном из проектов Ниже мы приводим цитату из рассказа опытного программиста о том, как его компания впервые попробовала использовать парное программирование. В этом примере упомянуто много основных черт парного


Пример использования Go To

Из книги автора

Пример использования Go To В следующем примере оператор Go To направляет поток программы из главной части процедуры к метке Special Value, если встречается необычное значение: Function GoToExample (ItemNumber As Integer ) Dim intR As Integer Select Case ItemNumber Case 2412 Go To SpecialValue Case Is < CutOffValue DoSomething


Пример 9-14. Подстановка параметров и сообщение о "порядке использования"

Из книги автора

Пример 9-14. Подстановка параметров и сообщение о "порядке использования" #!/bin/bash# usage-message.sh: ${1?"Порядок использования: $0 ARGUMENT"}# Сценарий завершит свою работу здесь, если входные аргументы отсутствуют,#+ со следующим сообщением.# usage-message.sh: 1: Порядок использования: usage-message.sh


1.7.1. Пример использования команды chown

Из книги автора

1.7.1. Пример использования команды chown Вот как можно поменять владельца файла с помощью команды chown:$ ls -l-rwxrwxrwx 1 louise admin 345 Sep 20 14:33 project$ chown pauline project $ ls -l-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 projectПраво владения файлом project переходит от пользователя louise к


1.7.2. Пример использования команды chgrp

Из книги автора

1.7.2. Пример использования команды chgrp Следующий пример демонстрирует, как поменять группу, которой принадлежит файл:$ ls -1-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project$ chgrp sysadmin project $ ls -1-rwxrwxrwx 1 pauline sysadmin 345 Sep 20 14:33 projectПользователь pauline передал группе sysadmin право владения файлом project, которое до


Пример использования таймера

Из книги автора

Пример использования таймера Данная программа выводит 1 каждые 100 миллисекунд в течение 3 секунд:uses Timers;procedure TimerProc;beginwrite(1);end;begin var t := new Timer(100,TimerProc);t.Start;Sleep(3000);end.Вызов Sleep здесь обязателен, иначе программа после создания таймера сразу закончится, и обработчик таймера ни