Азбука e-мыла

Давайте попробуем настроить ваш linux-box для приема и сортировки входящей корреспонденции, а также для отправки исходящей. Данная статья предполагает наличие у пользователя программ exim, fetchmail, procmail, mutt, которые входят в поставку, например, Debian Linux, а также прямых рук и свежей головы.

Предисловие
Моя конфигурация — Debian Linux 2.4.25 (i686) + fetchmail 6.2.5 + mutt + exim 3.36 + procmail 3.32. В принципе, критичным условием является наличие exim 3.X.X, для остальных же программ подходят практически любые версии.

Аз. «Почтамт» в Linux
Почтовая система в *nix состоит из трех частей. Первая — MTA (Mail Transport Agent — «отправлятель» почты, вроде sendmail, smail, qmail, exim и так далее). Вторая — MDA (Mail Delivery Agent — получатель почты, вроде sendmail, deliver, exim, procmail). Третья — MUA (Mail User Agent — просмотрщик почты, вроде mutt, pine, elm и прочих). Также каждый пользователь может создать в своем домашнем каталоге файл .forward, который заставит MDA перенаправлять почту для обработки указанной программе (например, фильтру спама).

Буки. Легкий способ...
Если вы не настолько отвыкли от Windows, чтобы совсем отказаться от привычных программ получения почты, то вам подойдет sylpheed (пакет sylpheed, см. рис.). Эта программа очень проста в использовании, построена на GTK+, поэтому весьма шустро работает и, в конце концов, очень похожа на всем известный The Bat! (а может, и на Outlook Express — я его ни разу не видел). Она сочетает в себе сразу MDA, MTA, MUA. А это значит, что вы не получите гибкой конфигурации, мощного инструментария, зато не придется копаться в настройках...
Я не пошел таким способом, поскольку не для этого работаю в Linux. И все же Sylpheed — мощная программа, поддерживающая все необходимые функции. Она имеет встроенный редактор, кучу настроек. Но эта программа не имеет текстового интерфейса и не отвечает неписаному правилу: лучше маленькая программа, отлично делающая одно дело, чем большая и плохая (данные слова не говорят о недоброкачественности продукта, а отражают мнение автора).

sylpheed

Веди. Сложный способ...
Для начала разберемся с тем, как рабо­тает почтовая система в интернете. Поскольку у вас нет собственного сервера, то рассмотрим случай с непостоянным подключением к сети, например, через модем. Пусть Барт отправляет письмо Лизе. Так как у Лизы нет постоянного адреса в сети, то она вынуждена пользоваться услугами сервера simpson.org, предоставляющего почтовые ящики своим клиентам. Барт пишет письмо, пользуясь MUA, затем MUA вызывает MTA, который по протоколу SMTP посылает письмо на почтовый сервер (simpson.org). На сервере MTA вызывает локальный MDA, который помещает полученное письмо в ящик Лизы на сервере. Затем fetchmail на компьютере Лизы получает почту, передает ее MDA. MDA помещает почту в ящик либо передает ее какой-то программе-фильтру. Из локального почтового ящика Лиза может прочитать почту при помощи MUA. Вот такую цепочку проходит каждое ваше письмо…
Эта предыстория поможет лучше понять принцип работы почтовой системы и, возможно, отвратит от идеи спамить кого-либо (представьте, какую работу нужно совершить серверу, чтобы обработать лишь одно письмо!).
Однако хватит теории, перейдем к практике. Для начала настроим один ящик — bartmail@simson.org.

Глаголь. Настройка fetchmail
Fetchmail — программа, доставляющая почту с сервера локальному MDA. Настроечный файл — ~/.fetchmailrc — должен содержать следующие строки: 'set postmaster "bart"' (bart — логин пользователя, который запускает fetchmail). Далее идут строки: 'set bouncemail', 'set no spambounce', — а затем самое главное: 'poll simpson.org with proto POP3', 'user 'bartmail' there with password 'foobar' is 'bart' here','mda 'procmail -f-''. Эти строки означают, что почта с ящика bartmail на simpson.org будет направлена пользователю bart на локальном компьютере, который выбрал локальным MDA procmail.

Добро. Настройка procmail
Procmail — программа, сортирующая почту. В ее файл конфигурации (~/.procmailrc) добавляем строки: 'PATH=/bin:/usr/bin', 'MAILDIR=$HOME/Mail', 'DEFAULT=$MAILDIR/inbox', 'LOGFILE=$MAILDIR/log'.
При таком файле конфигурации вся почта будет сложена в файл ~/Mail/inbox.
Если вам необходимо поместить почту от какого-то отправителя в другой файл, то нужно добавить правило:
:0:
* ^From.*sarg
$MAILDIR/sarg

Ну и так далее.
Советую сразу добавить простейший cпамоудалятель:
:0:
* ^Subject:.*(credit|sex|free|buy)
$MAILDIR/spam

Есть. Настраиваем exim
Exim будет отправлять почту. Для начальной настройки не понадобится никаких знаний. Запускаем eximconfig (из под root) и отвечаем на вопросы. В первом вопросе выбираем ответ '2', далее оставляем все по default, а на вопрос о smarthost'e отвечаем 'simpson.org' — это имя той машины, которая осуществляет отправку почты для bart'а.
Следующий вопрос — о том, кто будет получать почту для root'a. Отвечаем, что надо, например, 'homer'. Я же предпочитаю оставлять почту рута ему же (ответ — 'root'). Теперь идем к файлу '/etc/email-addresses', в котором надо указать: 'bart: bartmail@simpson.org'. Я думаю, понятно, что это значит: почту, исходящую от пользователя bart, нужно подписывать как bartmail@simspon.org.

Живете. Настраиваем mutt
Mutt — великолепная программа для работы с почтой. Она работает в консоли, что, по моему мнению, только плюс. Чтобы ее настроить, надо создать файл конфигурации ~/.muttrc. Базовый набор состоит из нескольких строк:

set charset=koi8-r
set send_charset=us-ascii:koi8-r:utf-8
set folder = "~/Mail
# , ,
# $MAIL
set mbox = "+inbox"
set editor = "mcedit"
#
set record = "+sent"
#
set postponed = "+postponed"
#
set spoolfile="+inbox"
mailboxes !+inbox +spam

Это был базовый набор, без которого mutt работать не станет. Для настройки под конкретного пользователя стоит прочесть man muttrc. Я же приведу в качестве примера часть своего конфига с комментариями.

Зело. Моя конфигурация mutt
Итак, в верху экрана мы видим строку статуса. У меня она имеет вид, заданный правилом 'set status_format="%f: %4n(%4m)%> "' (слева направо: название ящика, двоеточие, четыре позиции для количества непрочитанных писем, в скобках четыре позиции для общего числа писем, пробел важен). Куча других параметров есть в мануале (man muttrc).
Далее настроим вид списка сообщений: 'set index_format="%Z [%d] %-15.15F %s"' (слева направо: флаги, дата получения в квадратных скобках, 15 символов имени отправителя, тема).
Дальше идет формат даты: 'set date_format="!%H:%M %d/%m/%y"' (ЧЧ:ММ ДД/ММ/ГГ).
Говорим mutt'y, что строка статуса сверху: 'set status_on_top', что нужно показывать шесть строк из списка писем при просмотре сообщения: 'set pager_index_lines=6', что нужно оставлять одну строку предыдущей страницы при просмотре следующей в письме: 'set pager_context=1', что сортировать письма надо по дате получения: 'set sort=date'. Разумеется, это не все, что может mutt. В вашем ведении находятся цветовые настройки, клавиатурные настройки, макросы, события, запускаемые при определенных условиях, да и многое другое, что только может понадобиться профессиональному чтецу (или спамеру). Не забудьте установить права на файлы настроек, чтобы доступ к ним был только у создателя (chmod 600).

Земля. Как получать/отправлять почту
При отправлении: пишем письмо в mutt, посылаем, а затем при ручной отправке подключаемся к провайдеру, далее запускаем '/usr/sbin/sendmail -q'. При автоматической отправке делать ничего не надо — почта сама отправится при подключении к интернету, но об этом позднее.
Для получения: запускаем fetchmail и читаем затем mutt'ом. Fetchmail может быть настроен для получения почты через определенное промежутки времени, о чем пойдет речь далее.

И. Автоматизация почтамта
У exim и fetchmail есть функция запуска в качестве демона, что позволяет проверять почту периодически. Так, 'fetchmail -d 300' будет проверять почту каждые 300 секунд. Добавьте эту строку запуска в /etc/ppp/ip-up (или подредактируйте файл /etc/ip-up.d/fetchmail). В ip-down нужно добавить 'fetchmail -q' для остановки демона. При правильной установке exim сам будет отправлять почту из очереди при каждом подключении (команда /usr/sbin/exim -qf). Не забудьте добавить вашего пользователя в группу mail, чтобы он мог оперировать почтовыми программами. Итак, после несложных настроек­ почтамт вашего Linux полностью автоматизирован (разумеется, кроме процесса создания писем), вам даже не придется щелкать по кнопкам, но теперь встает вопрос оповещения о приходе почты.
С помощью нижеследующего скрипта вы всегда будете знать, пришла ли она.

#!/bin/bash
while [ -e /bin/bash ]; do
while [ -s ~/Mail/inbox ]; do
sleep 1; setleds +scroll;
sleep 1; setleds -scroll;
done
done

Этот скрипт заставит лампочку Scroll Lock моргать при наличии новой почты в inboх'е. Очевидно, что можно вместо моргания лампочкой проигрывать звуковой файл или даже форматировать диск, достаточно лишь поменять команду в соотвествии с изощренной фантазией. Если вы работаете в оконной системе (X), то для наглядного отображения статуса ящика воспользуйтесь системным монитором GKrellM (пакет gkrellm), который ко всему прочему умеет сам получать почту.

Ижа. Суперантиспам
Спам — плата за право иметь почтовый ящик. Так почему бы от нее не избавиться? Организуем антиспамерский фильтр на основе белого и черного списка. Итак, создадим в ~/Mail файлы white.lst и black.lst. В .procmailrc добавим следующие правила.

:0:
* ? formail -x"From" -x"From:" \
-x"Sender:" -x"Reply-To:" \
-x"Return-Path:" -x"To:" \
| egrep -is -f $MAILDIR/white.lst
$DEFAULT

Аналогичное правило, только вместо white.lst — black.lst, и вместо $DEFAULT — /dev/null — для черного списка.
Далее, в .muttrc добавим макросы для занесения адресов в списки:

'macro index \ew '| formail -x From: | addysort >> ~/Mail/white.lst'';
'macro pager \ew '| formail -x From: | addysort >> ~/Mail/white.lst'';
'macro index \eb '| formail -x From: | addysort >> ~/Mail/black.lst'';
'macro pager \eb '| formail -x From: | addysort >> ~/Mail/black.lst''.

И создадим файл /usr/local/bin/addysort (с правами на выполнение).

#!/usr/bin/perl -wn
unless (/\]+)/, "\n"; }

Все. Теперь в Mutt, при нажатии Esc-b, заносим в черный список, Esc-w — в белый.

Како. Заключение
Некоторая сложность настройки почтовых программ (хотя какая уж тут сложность, если весь процесс занимает не более 15 минут при наличии данного руководства?) окупается с лихвой. Имея в своих руках мощный инструментарий для обработки корреспонденции, вы можете эффективно бороться со спамом, создавать списки рассылки, участвовать в публичной переписке. Не бойтесь трудностей, поскольку они преодолимы. Я затратил на настройку системы с нуля около трех часов (сюда входит буквально все, включая выбор программ, чтение документации, кучу проверок) и теперь могу с гордостью сказать, что пишу из Linux. Если у вас что-то не выходит, то обратитесь к документации: Linux Gazette (lg-all), info exim (exim-doc), man fetchmailrc, man muttrc, *Mail*HOWTO.


Рекомендуем почитать: