Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #83, НОЯБРЬ 2005 г.

Крылатая почта юниксоида

Anton Karpov

Хакер, номер #083, стр. 083-102-1


<toxa@toxahost.ru>

Почтовая система в стиле UNIX-way

Для чего, по-твоему, предназначен почтовый клиент? Правильно, читать почту. А ты никогда не задумывался, почему все современные MUA (Outlook Express, Thunderbird, Sylpheed), кроме выполнения своих непосредственных задач, еще и сортируют почту, получают и отправляют письма, обрабатывают спам, в общем, занимаются всем, чем угодно, разве что кофе не варят? Так уж повелось в современном мире «дружелюбных к пользователю» систем, что все связанное с определенным кругом задач (в нашем случае - с почтой) делает Одна Большая Программа. И пользователь даже не задумывается, что тем самым сильно себя ограничивает. Зачем, например, мне держать эту Программу запущенной, если я хочу всего лишь автоматически забирать новую почту с сервера. Или автоматически пересылать определенные сообщения на другой ящик. Или отправлять почту не сразу, а в определенное время. К счастью, есть путь, способный освободить нас от рамок одной программы. И имя ему - UNIX-way.

[ингредиенты]

Для приготовления нашей почтовой пользовательской системы нам понадобятся следующие компоненты: mutt, getmail, procmail, spamassassin, msmtp, а также vim, gnupg, antiword и mairix - по вкусу. Я использую FreeBSD, поэтому весь софт будем ставить из портов. Разумеется, нетрудно спроецировать процесс установки и на твой любимый дистрибутив.

Mutt - превосходный консольный почтовый клиент, способный творить с письмами невероятные вещи. Расписывать все его достоинства не имеет смысла, достаточно сказать, что это самый популярный MUA среди разработчиков из opensource-сообщества, кернел-хакеров и просто крутых юниксоидов ;-). Мы будем ставить его devel-версию 1.5.х («стабильная» ветка имеет сейчас номер 1.4.х), которая имеет такие преимущества, как скорость работы, поддержку SMIME-расширений (1.4.х умеет только PGP-шифрование), и в то же время достаточно стабильна. Мы научим mutt читать news-конференции.

# cd /usr/ports/mail/mutt-devel

# make WITH_MUTT_MAILDIR_MTIME_PATCH=yes WITH_MUTT_NNTP=yes WITH_MUTT_IMAP_HEADER_CACHE=yes
WITH_MUTT_MAILDIR_HEADER_CACHE=yes WITH_MUTT_EDIT_THREADS=yes install clean

Как видно, вместо традиционного mbox я собираюсь использовать Maildir-формат почтового ящика. Для меня основным преимуществом Maildir является формат «одно письмо - один файл».

Getmail - программа для доставки почты с удаленных POP3/IMAP-серверов с множеством удобств и приятностей (поддержка SSL, доставка в Maildir-style ящики, докачка сообщений после разрыва сессии и т.п.), написанная на Питоне. Более популярный вариант - fetchmail.

# cd /usr/ports/mail/getmail

# make install clean

Также нам не обойтись без procmail. Она будет обрабатывать, модифицировать (если нужно) и выполнять сортировку сообщений по папкам.

# cd /usr/ports/mail/procmail

# make install clean

Msmtp - это легковесный почтовый агент, созданный для машин, на которых нет запущенного SMTP-демона. Исторически (так сказать, by design) подразумевается, что на каждой *nix-машине работает почтовый сервер (хотя бы для обработки локальных отчетов администратору, см. periodic(8)), настроенный, при необходимости, на релей «внешнего» почтовика. Но часто на desktop-машинах это совсем не так: periodic tasks убирают из crontab(5), а почтовый сервер выключают. В этом случае вместо sendmail можно использовать msmtp, который имеет поддержку SMTP-авторизации, TLS, множества аккаунтов, но при этом не выступает в роли полноценного MTA (не слушает порт и не принимает соединения).

Содержание  Вперед на стр. 083-102-2