Використовуємо procmail для керування поштою

Після отримання вихідного коду програми, для інсталяції його необхідно розпакувати наступною командою: tar -xzvf procmail.tar.gz

Проте, про існування опції BASENAME в Makefile зазвичай згадується. Цією опцією ми вказуємо базовий каталог, в який буде встановлений procmail. Із зазначеного нами базового каталогу підуть інші каталоги, такі як bin і man.







Нарешті, для компіляції пакета ми повинні виконати команду make install.

Procmail можна встановити для всієї системи і потім викликати деяким правилом sendmail (8). або він може бути встановлений будь-яким користувачем для особистого використання. В останньому випадку користувач вказує використання procmail в своєму файлі .forward. де повинен бути присутнім рядок типу наступної:

| IFS = '' exec / home / juan / procmail / bin / procmail -f- || exit 75 #juan

У цьому рядку я припустив, що користувач juan встановив procmail в свій домашній каталог HOME. Для цієї конкретної рядки BASENAME. визначене під час компіляції, буде / home / juan / procmail.

Основні функції

Procmail читає зі свого стандартного входу. Він перевіряє конфігураційний файл .procmailrc. який повинен знаходитися в каталозі HOME користувача. У цьому файлі визначаються деякі правила, які вказують procmail, що насамперед треба зробити після отримання повідомлення. Він може вирішити, що з ним робити - зберегти його, ігнорувати, автоматично відповісти і т.д. - перевіривши деякі рядки в заголовку повідомлення.

Крім того, procmail дозволяє нам автоматично обробляти приходить пошту або пошту, що зберігається у файлі.

конфігурація

Використовується конфігураційний файл .procmailrc і він повинен знаходитися в каталозі HOME.

Рядки, що починаються з: 0 або 0: вказують на початок нового правила, яке говорить procmail що робити з повідомленням.

Рядки, що починаються з *. позначають умова виконання правила. Procmail використовує цей механізм для визначення повідомлення, яке необхідно обробити цим правилом.

Решта рядки, тобто ті, які не починаються з: або * розглядаються як команди, або, іншими словами, що вживаються procmail'ом дії, що задовольняють умові. Деякими можливими діями або командами можуть бути видалити повідомлення, переслати повідомлення, зберегти повідомлення і т.д.

Насамперед необхідно вказати в .procmailrc деякі змінні оточення, тут наведені деякі з змінних, які б я порекомендував визначити в вашому .procmailrc

MAILDIR
Вказує на каталог, в якому procmail зберігає файли з поштовими повідомленнями. Зазвичай ця змінна вказує на $ HOME / mail або $ HOME / Mail. Той чи інший каталог, залежить від використовуваного поштового клієнта.

LOGFILE
Вказує на ім'я лог-файлу, в якому procmail записує всі виконані операції.

SENDMAIL
Вказує на те, де знайти sendmail, який використовується для автоматичного відповіді на повідомлення.

FORMAIL
Вказує на те, де знайти formail. Ця програма поширюється разом з procmail і її завданням є зміна поштових заголовків або переформатування повідомлення для відправки або збереження.

DEFAULT
Файл, в якому зберігається повідомлення, якщо procmail не може застосувати до нього жодного певного правила.

Визначати змінну оточення можна в будь-якому місці .procmailrc. Якщо змінна записана без символу =. за яким слідує значення, то така змінна видаляється.

Що стосується правил, то вони діляться на дві групи: Перші припускають, що після їх застосування повідомлення доставлено, і інші.

Перші правила прості, після обробки передбачається, що до цього повідомлення подальші правила не застосовуються і тому повідомлення вважається доставленим.

Другий тип правил, тобто ті, які не вважають, що повідомлення доставлено після їх обробки, дуже корисні при використанні декількох правил і для багаторазової обробки перед доставкою одного і того ж повідомлення.

Загальний синтаксис правила наступний:

Пройдемося по кожній частині і проаналізуємо її конструкцію. Перш за все, кожне правило починається з: 0. після цього можуть випливати будь-які з цих опцій:







H Умова застосовується до заголовку пошти.
B Умова шукається в тексті листа.
D Ця умова означає, що верхній і нижній регістри розрізняються.
A Це правило застосовується тільки коли застосовувалося попереднє.
a Як і A. за винятком того, що при застосуванні попереднього правила помилок не повинно бути.
E Це правило виконується, якщо попереднє не було застосовано.
e Це правило буде виконано, якщо попереднє був виконано, але завершилося з помилками.
h Команді передається заголовок повідомлення.
b Команді передається тіло повідомлення.
f Команда інтерпретується як фільтр.
c Створити копію cc повідомлення. При застосуванні цього правила передбачається, що повідомлення доставляється з цим прапором і після його доставки подальші правила можна застосовувати до копії повідомлення.
w Чекати закінчення виконання команди для отримання результату.
W Так само як і попередня опція, але в разі помилки не видавати ніяких повідомлень.
i Ігнорувати можливі помилки.
r Пише повідомлення таким, як воно є. Перевірка на закінчення символом нового рядка не виконується.

За замовчуванням, якщо не була вказана жодна опція, умова застосовується до заголовку повідомлення (опція H). На стандартний вхід команди поуступает і заголовок і тіло повідомлення (опції h і g). Верхній і нижній регістри не розрізняються.

Після: 0 і можливих опцій може слідувати друге:. Якщо так і є, то це вказує на те, що файл призначення, куди повинно бути записано повідомлення, повинен бути блокований щоб уникнути ситуації, коли два процеси одночасно пишуть в один файл. Можна вказати файл, який буде використаний в якості блокуючого.

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

^ Початок рядка.
$ Кінець рядка.
. Будь-який символ, за винятком символу повернення каретки.
* Нуль або більше разів.
+ Один або більше разів.
? Нуль або більше разів.
[A-z] Набір символів, в цьому випадку від a до z.
[^ A-z] Будь-який символ поза діапазону від a до z.
a | b Або 'a' або 'b'

Після умов йде одна команда. Якщо перший символ команди є одним з наведених нижче, то передбачається особлива поведінка:

Списки розсилки (mailing lists)

Procmail вирішує цю проблему просто. Ми можемо використовувати файл .procmailrc з наступними дуже простими правилами сортування нашої пошти з різних списків розсилки по Лінукс:

Уважно досліджуємо одне з цих правил. Якщо ви зрозумієте внутрішній принцип роботи будь-якого правила, то легко буде зрозуміти інше, оскільки основний механізм залишається колишнім.

На початку знаходиться рядок: 0. яка позначає початок нового правила. Інших опцій не вказано, тому для цього правила procmail бере опції за замовчуванням: верхній і нижній регістри не розрізняються, умова застосовується тільки до заголовку пошти, команда обробляє і заголовок і тіло повідомлення.

У наступному рядку знаходиться умова, яке, оскільки воно згадувалося раніше, завжди розпізнається, так як першим стоїть символ *. Умова є наступним регулярним виразом:

Підрядок ^ From вказує procmail на те, що необхідно шукати ці рядки слідом за підрядком From.

Наступний символ. * Означає будь-яку кількість символів. Раніше ми відзначили, що в регулярному виразі символ "." Еквівалентент будь-якому символу, а * позначає нуль або більше. Отже. * Означає, що після початкового From може бути нуль або більше символів.

Подумавши трохи над цим регулярним виразом, ви зрозумієте, що це правило "вирахує" такі рядки:

Наступним рядком є ​​команда (або дія) і воно вказує, що робити з повідомленням. У цьому випадку передбачається зберегти його у файлі linux-mx. Якщо абсолютний шлях до файлу не вказано, за замовчуванням приймається, що він додається до змінної оточення $ MAILDIR.

автоматична відповідь

Щоб це зробити, напишіть правило, яке вважає запитом вашого ключа PGP будь собщение, в рядку subject якого є рядок PGP. Це правило можна записати як:

Та ж сама ідея використовується для написання звичайної програми, яка повідомляє людям про те, що ми у відпустці і відповімо на їх поштове повідомлення після повернення:

В останньому випадку умов немає, так як на всі повідомлення будуть відправлені одні й ті ж відповіді.

Як уникнути зациклення автовідповідача

formail -r -A "X-Loop: [email protected]"

Це правило запобігає зациклення, так як будь-який собщение, що містить в заголовку рядок X-Loop не задовольнятиме умовам, і в результаті procmail на нього не відповість.

декодування файлів

Ще одним цікавим правилом нашого .procmailrc може бути декодування надходить пошти, автоматично закодованої uuencode (1). Це правило можна задати як:

Тут явно задано опцією B. що умова правила повинно застосовуватися тільки до тіла повідомлення.

Якщо правило знаходить рядок, що починається з рядка "begin 644", то це означає, що це початок файлу, закодованого uuencode (1). тому встановлюється змінна оточення MAILDIR. що еквівалентно зміни каталогу, на який вказує ця змінна. З цього моменту всі дії з виведення повідомлень будуть виконуватися з урахуванням зазначеного базового каталогу. У нашому випадку, нам необхідно, щоб надходять повідомлення зберігалися в $ HOME / files.

Далі йде правило, безумовне, яке тільки направляє повідомлення в канал для декодування. Вихідний файл буде відправлений у $ HOME / files.

висновок

Хочеться вірити, що після цього короткого вступного курсу в procmail стало ясно, що procmail надзвичайно гнучкий і може допомогти зробити управління нашою поштою дуже простим і зручним. Я б рекомендував поекспериментувати з регулярними виразами і правилами, адаптувати їх до ваших потреб, так як можливості procmail простягаються набагато далі, ніж я зміг обговорити в цьому короткому вступі.







Схожі статті