Настройка почтовой системы в Linux

Настроить Линукс для работы с почтой совсем не сложно. Нужно лишь написать конфигурационные файлы для нескольких ключевых узкоспециализированных программ, на которых и будет основана наша удобная и многофункциональная система работы с электронной почтой. Фактически, эта статья описывает все основные аспекты работы с почтой в Linux.

[Дмитрий А. Аленичев]

Настройка почтовой системы в Linux

Дмитрий А. Аленичев

Homepage

< zlyden@nightmail.ru >

Copyright № 2004 Dmitri A. Alenitchev

История:
Версия 1.205 Декабря 2004
Добавлено: getmail, sendmail, exim, esmtp, msmtp, ссылки на сайты программ. Новый раздел "Благодарности". Изменения в нумерации и структуре разделов.
Версия 1.030 Ноября 2004
Первая версия. Работа с почтой: fetchmail, procmail, mutt, abook. FAQ.

Содержание

Введение
1 Получение почты
1.1 Fetchmail
1.2 Getmail
2 Обработка почты
3 Просмотр и написание почты
4 Отправка почты
4.1 Sendmail
4.2 Exim
4.3 Esmtp и msmtp
4.4 Другие
5 Адресная книга
Заключение
FAQ. Часто задаваемые вопросы (ЧаВО)
Дополнительные источники информации
Благодарности

Введение

Настроить Линукс для работы с почтой совсем не сложно. Нужно лишь написать конфигурационные файлы для нескольких ключевых узкоспециализированных программ, на которых и будет основана наша удобная и многофункциональная система работы с электронной почтой. Фактически эта статья описывает все основные аспекты работы с почтой в Linux.

1 Получение почты

В задачи программы доставки почты в нашей системе будут входить:

1. Получение почты с pop3-сервера
2. Передача писем программе обработки почты

Рассмотрим две программы данного типа: fetchmail и getmail. Они очень сильно различаются по возможностям. Fetchmail работает с кучей протоколов (POP2, POP3, RPOP, APOP, KPOP, IMAP4 и другие) и имеет огромное количество различных функций. Getmail наоборот работает только с POP3, но многим она больше нравится.

1.1 Fetchmail

Сайт проекта: www.tuxedo.org/~esr/fetchmail
Итак, создаем файл /home/user_name/.fetchmailrc:

$ touch /home/user_name/.fetchmailrc
Изменяем права доступа, т.к. в этом файле будут храниться наши пароли от почты:
$ chmod 0600 /home/user_name/.fetchmailrc
Теперь открываем его своим любимым редактором и пишем:
# .fetchmailrc - конфиг для fetchmail
# записывать лог-файл
set syslog
# общие для всех учетных записей настройки
defaults       protocol pop3,
               timeout 60,
               nokeep,		# удалять почту на сервере после получения
               fetchall		# получать всю почту
# можно настроить дополнительные параметры
#
# Учетная запись 1
poll "pop.mailhost.ru",
    user "username",
    password "pass";
#
# Учетная запись 2
poll "mail.freemail.ru",
    user "username",
    password "pass";
Таймаут указывается в секундах, то есть, в данном случае, 1 минута. Таким же образом укажите в конфиге все свои почтовые ящики.

1.2 Getmail

Создаем директорию /home/user_name/.getmail/ и файл getmailrc в ней:

$ mkdir /home/user_name/.getmail
$ touch /home/user_name/.getmail/getmailrc
Открываем и пишем:
# .getmailrc - конфиг для getmail
# общие для всех учетных записей настройки
[default]
message_log = "/home/user_name/.getmail/log"
				# путь к логу
delete = 1 			# удалять почту на сервере после получения
readall = 1 			# получать всю почту
postmaster = "| procmail"	# почту на обработку
#
# Учетная запись 1
[username_at_mailhost]
server = pop.mailhost.ru
username = username
password = "pass"
#
# Учетная запись 2
[username_at_freemail]
server = mail.freemail.ru
username = username
password = "pass"
Точно также опишите все свои почтовые ящики.

2 Обработка почты (procmail)

Сайт проекта: www.procmail.org
Procmail будет раскладывать нашу корреспонденцию по отдельным почтовым файлам. Создаем конфиг (.procmailrc) и лог (procmail.log):

$ touch /home/user_name/.procmailrc
$ touch /home/user_name/Mail/procmail.log
Открываем конфиг и пишем:
# .procmailrc - конфиг для procmail
# Переменные
#
MAILDIR=/home/user_name/Mail			# каталог с почтой
LOGFILE=/home/user_name/Mail/procmail.log	# лог для записи всех операций
DEFAULT=/home/user_name/Mail/mbox		# файл для не отсортированных сообщений
#
# Правила сортировки почты
#
# Пример: сортировка почты, приходящей на e-mail user_name@host.ru
:0
* ^To.*user_name@host.ru			# условие (To: user_name@host.ru)
host_mail					# файл host_mail в каталоге MAILDIR
#
# Пример: mailing-list Moscow LUG
:0
* ^To.*mlug@UnixCenter.RU			# условие (To: mlug@UnixCenter.RU)
mlug						# файл mlug в каталоге MAILDIR
#
# Пример: сортировка от адресатов из friends.org
:0
* ^From.*@friends.org				# условие (From: *@friends.org)
fromfriends					# файл fromfriends в каталоге MAILDIR
#
# Пример: удаление писем от адресата spammer@microsoft.com
:0
* ^From.*spammer@microsoft.com			# условие (From: spammer@microsoft.com)
/dev/null					# каталог /dev/null
#
# Пример: автоматическая отсылка PGP-ключа
0:
* ^Subject.*PGP					# условие (Subject: PGP)
| (formail -r ; cat /home/user_name/key.asc)	# вывести PGP-ключ
| sendmail -t					# отправить его
Я надеюсь вы поняли, что procmail это очень мощная программа сортировки электронной почты. Для нее можно писать правила практически неограниченной сложности. Все ваши рассылки и другая корреспонденция будут аккуратно разложены по отдельным файлам.

3 Просмотр и написание почты (mutt)

Сайт проекта: www.mutt.org
В качестве MUA, как я уже писал, у нас будет работать mutt. Это консольная, очень удобная и простая в использовании, программа для чтения и написания писем. Попробую коротко описать как ее настраивать и использовать.

Создаем файл /home/user_name/.muttrc:

$ touch /home/user_name/.muttrc
Открываем и пишем:
# .muttrc - конфиг для muttrc
set folder=/home/user_name/Mail	# каталог для почты
set arrow_cursor		# курсор в виде '->'
set attribution="%d, %n написал:"
				# начало письма при ответе
set copy=yes			# сохранять копии исходящих писем
set edit_headers		# редактировать заголовки при создании письма
set editor="vim"		# редактор писем
set folder_format="%t%N %-30.30f %8s"
				# вид списка папок
set index_format="%4C %Z %{%b %d} %-31.31F %N (%4c) %s"
				# вид списков писем
set mailcap_path="/home/user_name/.mailcap"
				# путь к .mailcap
set menu_scroll			# прокручивать список писем по 1 строке
set mail_check=5		# интервал проверки почты
set mbox=+mbox			# файл для хранения прочитанных сообщений
set mime_forward=ask-no		# запрашивать вид пересылаемого письма
set postponed=+drafts		# черновики
set print=ask-yes		# запрос перед печатью файла
set print_command=lpr		# команда печати
set record=+sent		# куда сохранять отправленные письма
set signature="~/.signature"	# файл с подписью к сообщениям
set show_alt			# y/n вместо д/н
set pager_stop 			# в конце письма не переходить на следующее
set send_charset="us-ascii:iso-8859-1:koi8-r:windows-1251:utf-8"
				# кодировка отправляемых писем
#
# сортировка писем при просмотре
set sort=threads
set sort_aux=reverse-date-received
set sort_browser=reverse-date
#
set spoolfile='/var/spool/mail/user_name'
				# путь к спулу почты
#
set from="Your Name <user_name@host.domain>"
				# поле From заголовка отправляемых писем
#
# файлы c почтой
# перечислите все ваши почтовые файлы
mailboxes +mbox +work +friends
#
# если вы подписаны на mailing-list'ы укажите здесь адреса
subscribe zopyrus@itconnection.ru
В каталоге /etc находится файл Muttrc. Он может послужить вам хорошим примером конфигурационного файла для mutt.

Создайте файлы /home/user_name/.mailcap и /home/user_name/.signature:
$ touch /home/user_name/.mailcap
$ touch /home/user_name/.signature
Файл .mailcap нам необходим для обработки MIME-типов. Приведу небольшой пример, чтобы продемонстрировать структуру этого файла:
# .mailcap - обработка MIME-типов в mutt
text/html; links %s
image/gif; xview %s
image/jpg; xview %s
Думаю, что типы, которые вам хотелось бы обрабатывать вы без труда добавите сами.

В файле .signature укажите свою подпись. Пример я думаю приводить не надо ;-)

Итак, настройка окончена, запускаем:
$ mutt
Перед собой мы видим список писем из спула (/var/spool/mail/user_name). Нажатием клавишы '?' открываем справку. Смотрим список клавиш, на которые нам придется нажать не один раз в процессе ежедневной работы с этой программой. Выход из справки - 'q'. Чтобы открыть какой-нибудь почтовый файл следует нажать 'c'. Внизу экрана мы видим предложение ввести имя файла. Нажимайте 'Tab' или '?' и откроется окно выбора файла. Выбираем какой-нибудь файл и видим список почтовых сообщений. Клавишы 'Вверх', 'Вниз' - перемещение по списку писем; 'Enter' - чтение письма; 'Page Up', 'Page Down' - страничная прокрутка письма. Об остальных клавишах вы без труда найдете нужную информацию во встроенной справке.

Запустите mutt с опцией -y, чтобы увидеть список из файлов указанных в конфиге (mailboxes +mbox +work +friends). Запук с опцией -f filename откроет почтовый файл filename.

4 Отправка почты

У нас есть выбор: отправлять в помощью своего (локального) smtp-сервера или использовать какой-нибудь внешний сервер (например, провайдера). В первой версии этого руководства я рекомендовал отправлять почту с помощью smtp-сервера, поставляемого с дистрибутивом, но в этом случае вам придется позаботиться о его безопасности. Намного меньше хлопот будет при отправке через внешний сервер, но удобнее использовать хорошо настроенный локальный сервер.

Я рассмотрю !!!$$ 4 $$!!! программы этого типа и расскажу о настройке каждой из них.

4.1 Sendmail

Сайт проекта: www.sendmail.org
Sendmail поставляется со многими дистрибутивами. Этот сервер громоздкий и сложный в настройке. Его можно использовать как для самостоятельной отправки, так и для отправки писем через другой smtp-сервер. Сразу же после установки sendmail уже можно использовать, но для пересылки писем на внешний сервер необходимо настроить smarthost. Открывайте /etc/sendmail.cf и ищите в начале файла строки:

# "Smart" relay host (may be null)
DS
Вот после этого DS и пишем в квадратных скобках имя smtp-сервера. Должно получиться вот так:
# "Smart" relay host (may be null)
DS[smtp.server.ru]
Теперь письма будут отправляться через указанный smtp-сервер.

4.2 Exim

Сайт проекта: www.exim.org
Exim является сервером по умолчанию для Debian Linux. Программа очень удобная и настроить ее не сложно.

4.3 Esmtp и Msmtp

В этом разделе описаны программы не являющиеся stmp-серверами, но позволяющие отправлять почту. Такой тип программ называется "smtp-plugins for MUA", то есть надстройка над Mail User Agent, позволяющая отсылать корреспонденцию через внешний smtp-сервер. Их очень легко настроить и удобно использовать.

Esmtp
Сайт проекта: !!!######!!!
Создаём файл /home/user_name/.esmtprc:

$ touch /home/user_name/.esmtprc
Открываем его и пишем:
# .esmtprc - конфиг для esmtp
#
hostname = HOST:25
username = "roux"
password = "secret"
В /home/user_name/.muttrc необходимо добавить следующую строчку:
set sendmail="esmtp -v"
Msmtp
Сайт проекта: msmtp.sourceforge.net
Создаём файл /home/user_name/.msmtprc:
$ touch /home/user_name/.msmtprc
Открываем его и пишем:
# .msmtprc - конфиг для msmtp
# Учётная запись по умолчанию
account default
host smtp.work_host.ru		# smtp-сервер
from login@work_host.ru		# e-mail
user login			# логин
password pass			# пароль
#
# Локальная учётная запись
account local			# имя учётной записи
host localhost			# используется локальный smtp-сервер
from user_name@hostname.ru	# e-mail
#
# Учётная запись провайдера с аутентификацией CRAM-MD5. Порт 2500
account provider		# имя учётной записи
host mail.super_provider.ru	# smtp-сервер
port 2500			# порт
from login@super_provider.ru	# e-mail
auth cram-md5			# аутентификация CRAM-MD5
user login			# логин
password "pass"			# пароль
В /home/user_name/.muttrc необходимо добавить следующую строчку:
set sendmail="msmtp"


4.4 Другие

qmail, postfix

5 Адресная книга (abook)

Сайт проекта: abook.sourceforge.net
Итак, наша система уже позволяет получать, сортировать и создавать письма. Теперь пора позаботиться об удобстве написания писем. Запускаем abook:

$ abook
Разобраться в интерфейсе этой программы не составит труда.

Приведу пример добавления записи. Нажимаем клавишу 'a', вводим имя. Открывается окно просмотра и редактирования записи. Клавишы '2','3','4','5' служат для добавления к записи e-mail адресов. Клавишами 'Влево','Вправо' перемещаемся между разделами 'CONTACT', 'ADDRESS', 'PHONE', 'OTHER'. Окончив редактирование записи нажатием клавишы 'Enter' возвращаемся к списку записей. Для написания письма выбранному адресату предназначена клавиша 'm'. Если вы хотите написать письмо на несколько адресов сразу, то выделите нужные записи нажатием пробела и нажмите 'm'. В abook, также как и в mutt, имеется встроенная справка - '?'

Записи вашей адресной книги хранятся в файле .abook.addressbook, а настройки программы - в .abookrc. Кстати, рекомендую поменять строку 'www_command=lynx' на 'www_command=links', так как links все-таки более удобный браузер, чем lynx.

Заключение

Мы настроили систему для работы с почтой. Не правда ли, это было совсем не сложно?

FAQ. Часто задаваемые вопросы (ЧаВО)

В: Как проверять почту при каждом подключении к Интернет?
Скрипты, находящиеся в паке /etc/ppp/ip-up.d/ выполняются каждый раз при подключении к Интернет. Кидайте в /etc/ppp/ip-up.d/ скрипт следующего содержания:

#!/bin/sh
FETCHMAIL=/usr/bin/fetchmail
[ ! -x "$FETCHMAIL" ] || exec "$FETCHMAIL" > /dev/null 2>&1
В: Как отправлять отложенную почту при каждом подключении к Интернет?
В ту же папку (/etc/ppp/ip-up.d/) кладете скрипт:
#!/bin/sh
SENDMAIL=/usr/sbin/sendmail
[ ! -x "$SENDMAIL" ] || exec "$SENDMAIL" -q >/dev/null 2>&1
Данный скрипт можно совместить в одном файле с предыдущим

В: Как автоматически переконвертировать в другую кодировку письма от определенного отправителя?
Перенаправлять в iconv:
:0
* ^From.*vasya@love-cp1251.ru
| iconv -c -f cp1251 -t koi8-r
В: Как автоматически декодировать почту закодированную uuencode?
Что-то типа этого:
:0 B
* ^begin 644 .*
{
        MAILDIR=$HOME/files

        :0
        | uudecode
}
Добавьте это правило к вашему .procmailrc
Примечание: в первой строчке символ 'B' указывает на то, что условие (вторая строка) необходимо искать в теле письма.

Дополнительные источники информации

Прочитайте документацию для каждой программы (/usr/share/doc/), посмотрите man page и посетите страницы этих программ в Интернете.

Благодарности

Спасибо форму OpenNet и всем кто присылал комментарии и пожелания по поводу улучшения этого руководства.

Обсуждение версии 1.0

Присылайте свои комментарии, пожелания, критику, вопросы. Жду отзывов.
Дмитрий Аленичев

Статья взята с сайта OpenNet.

[ опубликовано 30/12/2004 ]

Дмитрий А. Аленичев - Настройка почтовой системы в Linux   Версия для печати