14.4. Автоматическая сортировка входящей почты — программа procmail

14.4. Автоматическая сортировка входящей почты — программа procmail

Лучше всего объяснять работу любой программы на практическом примере. Допустим, в вашей организации три отдела, и их адреса depl@firma.ru, dep2@firma.ru и dep3@firma.ru. У вас также есть пользователь mail, на имя которого будет приходить вся почта. Вам нужно сортировать приходящую почту по названию отдела: например, если в теле письма или в одном из его заголовков упоминается название отдела, отправить это сообщение одному из пользователей отдела. Кроме того, вы хотите, чтобы рассылка проекта LinuxRSP отправлялась вам по адресу adm@firma.ru.

Создайте в домашнем каталоге пользователя mail файл .procmailrc, примерное содержание которого показано в листинге 14.2.

Листинг 14.2. Файл .procmailrc — правила сортировки почты

:0

* ^Subject:.*dep1

! dep1

:0

* ^Subject:.*dep2

! dep2

:0

* ^Subject:.*dep3

! dep3

:0

* ^Subject:.*LinuxRSP

! adm

Правила означают следующее: если в теме (заголовок Subject) присутствует название отдела, то сообщение будет отправлено нужному пользователю, который должен быть зарегистрирован в системе. Вместо имени пользователя можно указать адрес электронной почты.

Можно выполнить сортировку по любому другому полю. Например, последнее правило могло бы выглядеть так:

:0

* ^From:.* Subscribe.Ru

! adm

В этом случае, если кто-нибудь из пользователей вашей системы также подпишется на другую рассылку на сервере Subscribe.Ru, то вся почта попадет к пользователю adm.

А теперь создадим почтовый автоответчик. Существуют два типа автоответчиков. Первые посылают автоответ только на определенные сообщения (например, отправляют клиенту прайс-лист вашей организации по его требованию), а вторые — на все (например, сообщают, что вы сейчас заняты, прочитаете письмо тогда-то). Автоответчик первого типа настраивается при помощи правила

0:

* ^Subject.*Price

| (formail -r ; cat $HOME/pricelist.zip) | sendmail -t

А второй тип создается еще проще. Вы не определяете никаких условий, поэтому файл info.txt, содержащий ваш автоответ, будет послан любому отправителю:

0:

| (formail -r; cat $HOME/info.txt) | sendmail -t

Владельцем файла .procmailrc должен быть пользователь mail. Права доступа следует установить «600».

Вызывать агент доставки procmail можно с помощью правил программы sendmail, но сейчас мы рассмотрим другой способ. В этом же каталоге ($HOME/mail) создайте файл .forward с такими же правами доступа, как у .procmailrc. В файле .forward задаются правила перенаправления почты. Добавьте в него следующую строку:

|IFS= && exec /usr/bin/procmail USER= <mail>

Используйте procmail с большой осторожностью, потому что если вы неправильно укажете условия сортировки, почта будет просто утеряна без возможности восстановления.

Строки файла конфигурации .procmailrc, которые начинаются с символа решетки (#) считаются комментариями.

Строки, начинающиеся с последовательности символов :0 или :0:, определяют правила, на основании которых procmail выполнит действие над сообщением. После символов :0 можно указать опции поиска и исполняемый файл, которому будет передано сообщение. Общий синтаксис такой:

:0 [опции] [: программа]

Опция H (header) означает, что условие будет применяться к заголовку письма, а опция В — к телу. Опция D указывает программе различать нижний и верхний регистры символов. По умолчанию используется опция H, то есть условие применяется только к заголовку, а верхний и нижний регистры не различаются. Подробнее об опциях вы прочитаете на man-странице программы procmail.

Условие задается с помощью регулярных выражений. Каждое условие начинается символом * и записывается в отдельной строке. Регулярные выражения задаются как обычно, а именно:

? Символ ^ указывает на начало строки, а $ — на ее конец.

? Символ . обозначает любой символ, кроме CR (возврат каретки).

? Символы ? и * читаются как «ноль или более раз».

? Символ + — «один или более раз».

? Символ | обозначает логическую операцию ИЛИ : x|у — x ИЛИ у.

? [a-z] определяет любой символ из диапазона a..z.

? [^a-z] задает любой символ вне диапазона a..z.

После условия указывается одна команда. Если первый символ команды «!», то сообщение будет перенаправлено на все указанные почтовые адреса, а если «|», то сообщение будет передано исполняемому файлу (программе), который указан после символа Вместо исполняемого файла можно указать переменную окружения, в которую будет записан результат.

Переменная окружения MAILDIR устанавливается в файле .procmailrc. Обычно она имеет значение $HOME/Mail.

Кроме переменной окружения MAILDIR, вы можете указать переменные окружения SENDMAIL и FORMAIL, которые содержат полный путь к программам sendmail и formail (фильтр-преобразователь сообщений в формат mailbox). Переменная окружения LOGFILE содержит имя файла протокола программы procmail, а переменная DEFAULT — имя файла, в который будут записываться сообщения, к которому procmail не может применить ни одно из правил.

Для иллюстрации я приведу свой файл конфигурации procmail.

Листинг 14.3. Мой файл .procmailrc

PATH=$HOME/bin:/usr/bin:/usr/sbin:/bin:/usr/local/bin:.

MAILDIR=/home/den/mail

DEFAULT=$MAILDIR/mbox

LOGFILE=$MAILDIR/from

LOCKFILE=$HOME/.lockmail

:0

* ^Subject.*Privet

privets

:0

* ^Subject.*Job

| (formail -r ; cat /home/den/vakancy.txt) | /usr/sbin/sendmail -t

Если в теме сообщения было найдено слово «Privet», то все сообщения будут сохраняться в файле /home/den/mail/privets. Если тема сообщения содержит слово «Job», то по адресу отправителя будет автоматически отправлен файл vakancy.txt. Файл vakancy.txt должен быть текстовым — это не вложение.

Файл протокола, в который программа procmail запишет адрес отправителя, тему и размер сообщения, называется from.

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

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

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

OID, их автоматическая генерация и перезагрузки

Из книги Документация NetAMS автора Автор неизвестен

OID, их автоматическая генерация и перезагрузки При создании конфигурационного файла, и при добавлении юнитов вручную oid можно не указывать. При этом значение oid генерируется автоматически, так что если набрать show config, значения oid выставятся каким–то случайным образом.


Автоматическая выгрузка DLL-файлов

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович

Автоматическая выгрузка DLL-файлов С помощью реестра можно включить автоматическую выгрузку DLL-файлов. Ее целесообразность обусловлена тем, что интервал времени, через который оболочка Windows выгружает неиспользуемые DLL-файлы, может быть достаточно большим (например, при


Автоматическая проверка

Из книги Word 2007.Популярный самоучитель автора Краинский И

Автоматическая проверка При автоматическом контроле орфографии и грамматики Word проверяет в тексте ошибки непосредственно при наборе. В таком случае сразу после того, как слово или предложение набрано, видно, допущена ошибка или нет: программа подчеркивает слова,


Автоматическая смена обоев

Из книги 500 лучших программ для Windows автора Уваров Сергей Сергеевич

Автоматическая смена обоев Украсить Рабочий стол, не устанавливая специальные программы для визуализации интерфейса, можно стандартными обоями. Используя для этого высококачественные изображения, можно фактически каждый день изменять внешний вид своего Рабочего


II. Автоматическая корректировка текста

Из книги Описание работы пакета OOoFBTools Создание книг FB2 автора Кузнецов Вадим

II. Автоматическая корректировка текста Для корректировки текста можно использовать либо интерактивные инструменты (см. ниже), либо – автоматические. Рассмотрим их подробнее.


Использование фильтров Procmail

Из книги Сетевые средства Linux автора Смит Родерик В.

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


Роль Procmail в процессе доставки почты

Из книги Самоучитель работы на Macintosh автора Скрылина Софья

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


Запуск Procmail

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич


4.1.8. Фильтрация входящей почты

Из книги Windows Vista. Трюки и эффекты автора Зозуля Юрий

4.1.8. Фильтрация входящей почты Все письма, доставляемые на ваш компьютер, помещаются в папку Входящие (Inbox), что становится неудобным, когда их скапливается большое количество. Приложение Mail, как и другие почтовые клиенты, например The Bat! или Outlook Express, предоставляет


11.4. Автоматическая установка Windows Vista

Из книги Монетизация сайта. Секреты больших денег в Интернете автора Меркулов Андрей

11.4. Автоматическая установка Windows Vista Пакет Windows AIKЕсли вам приходилось устанавливать одну и ту же операционную систему на несколько компьютеров, то вам, вероятно, надоедало постоянно отвечать на одни и те же вопросы. Windows Vista имеет специальные средства для установки


Автоматическая серия писем клиенту

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Автоматическая серия писем клиенту Продать что-то клиенту, который увидит ваше предложение несколько раз, гораздо легче, чем клиенту, который впервые зашел на ваш сайт и покинул его навсегда.Чтобы получить возможность работать с клиентом даже после того, как он уйдет с


Автоматическая дефрагментация

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

Автоматическая дефрагментация Одним из нововведений Windows XP является автоматическая дефрагментация файловой системы при простое компьютера в течение определенного промежутка времени (10-30 минут). При этом по умолчанию также выполняется дефрагментация загрузочного


9.3. Автоматическая нумерация и списки

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

9.3. Автоматическая нумерация и списки В CSS существует два свойства для управления нумерацией: counter-increment и counter-reset. Счетчики, которые определены данными свойствами, используются функциями counter() и counters() свойства content. Рассмотрим подробно свойства для управления