.:Публикации:. [www.karlson.ru]


КомпьюТерра # 24-25 (104-105), Июль 4 1995

SENDMAIL -- электронная почта для всех и каждого.

Никита Кожекин

Предлагаемая вашему вниманию статья описывает краткое устройство sendmail - популярного почтового агента ОС Unix

     Понятие электронная почта знакомо, пожалуй, всем и каждому. Но лишь понятие, а вот то, как она устроена, для тех же "всех и каждого" остается тайной за семью печатями. Хотя все не так уж и сложно. Функции распространения почты в Unix (да и почти везде) разделены между двумя утилитами - MUA (Mail User Agents, или пользовательские почтовые агенты, которые "отвечают" за управление всеми аспектами пользовательского интерфейса; это программы вроде maff, Mail, mailx, mailtool и т.п.) и МТА (Mail Transfer Agents, или агенты пересылки почты, чья "обязанность" - управление собственно пересылкой; как правило, это sendmail). Подобная дифференциация была введена в стандарте Х.400.

     Основой для программы sendmail послужил продукт delivermail, созданный в 1979 году под BSD Unix 4.0/4.1 и усовершенствованный позднее Эриком Алманом до вида sendmail. В отличие от delivermail, последняя программа не была специфицирована для одной сети, а поддерживала почти все, что открывало доступ в IAO-бальные сети (например, Internet), реально состоящие из нескольких ЛС. Последняя версия sendmail всегда доступна с ftp.cs.berkley.edu. Встречаются, правда довольно редко, и другие МТА. Например, рр, или mmdf, поддерживающий CSnet, используется в SCO Unix (фирма Santa Cruz Operation). Кроме того, МТА применяются в некоторых специфических случаях, например, при работе с DOS, а также с еще более "экзотическими" (для Internet) операционными системами. Останавливаюсь на этом специально, так как 2/3 (даже больше) ядра Internet состоят из Unix-машин, DOS же - это всего лишь 0.7 % ядра. В общем, все дальнейшее повествование будет касаться именно sendmail.

     Программа sendmail поддерживает два типа протоколов: UUCP (Unix-to-Unix Copy) и SMTP (Simple Mail Transfer Protocol). Адреса SMTP - это адреса типа: user@host, user@host.domain и user@host.domain.zone, а адреса UUCP - это host!user, host!host!user и user@host.uucp.

     Возможна и более "хитрая" адресация, например: hostA!user%hostB пересылает почту с машины hostA на hostB, a user!hostA@hostB, наоборот, с hostB на hostA. Отправка письма происходит в несколько этапов. Сначала вы составляете собственно текст вашей любимой MUA. Этот текст (письмо) состоит из двух частей: заголовка и сообщения. Заголовок включает в себя всю административную информацию о сообщении (кто, когда и кому) и обычно выглядит так:

  From: Boris Nikolaevitch EItsin eltsin@kremlin.gov (кто
  послал)
  To: grachev@army.gov (кому послал?
)
  cc: zhirinovsky@whitehouse.msk.ru (кому послал копию?
)
  Date: Mon Sep 21 18:11:24 1997 (когда послал?
)
  Content-Length: 512 (сколько строк послал)
  (Далее - пустая строка отделяющая заголовок от тела письма
.)

Число россиян, обращающихся к услугам электронной почты, растет с каждым месяцем. Но многие ли из них умеют конфигурировать электронную почту, многие ли представляют все тонкости ее работы? Конечно нет. Обычный смертный этим почти не интересуется. А зря, ибо узнав, как устроен sendmail, вы сможете открыть для себя богатый мир информационных ресурсов Internet...

     Затем по этим данным составляются: конверт, заголовок и тело сообщения, которые передаются sendmail. Конверт, остающийся невидимым не только для получателя корреспонденции,но и ее отправителя,содержит адреса отправителя/получателя и внутренние данные для МТА. Для его оформления используется информация из заголовка сообщения. В случае применения протокола UUCP почта рассылается по принципу "stop-go", то есть сообщение передается от машины к машине, и то что письмо ушло, еще не значит, что оно обязательно дойдет до адресата. При использовании протокола SMTP рассылка почты происходит в режиме "on line". В этом случае применяется протокол "клиент-сервер" RFC-821 (Request for comments). Sendmail запускается в качестве демона и "слушает" порт TCP: если все нормально, то устанавливается прямое соединение с удаленным клиентом SMTP - другим sendmail. Немного отличается рассылка на удаленную и местную машины: заголовок, тело и конверт обычно передаются через pipe.

     Программа sendmail располагает собственной коллекцией различных файлов, которые необходимы для работы с ней. Файл конфигурации обычно носит имя /etc/sendmail.cf. Конфигурируется он довольно сложно, но, как правило, в поставке имеется готовый файл. Трудность самостоятельного обновления конфигурационного файла заключается прежде всего в том, что его команды сокращены до отдельных букв:

- А - имя файла почтовых алиасов (по умолчанию /etc/aliases);

- О - создание макросов;

- С и F - определение классов имен;

- Н - создание заголовка;

- М - описание мэйлеров;

- О - задание опций;

- Q - файл почтовой очереди (по умолчанию /var/spool/mqueue);

- S и R - правила преобразования адресов (набор правил/правило).

     Подготовив конфигурационный файл, необходимо выполнить команду sendmail sendmail, которая укажет sendmail обновить конфигурацию. Файл почтовой очереди носит имя /var/spool/mqueue. В него записываются письма, ждущие отправки. Бывает, что письма задерживаются (например, из-за неготовности машины получателя к приему). Возможность просмотра содержания почтовой очереди предоставляет программа mailq. Файл почтовых алиасов называется /etc/aliases. Он задает информацию о пересылке, сокращении адресов, добавлении писем в файлы и выводе их в другие программы. Обязательным алиасом является только задание имя обработчика почты MAILER_DAEMON - обычно что-то вроде pochtalion_pechkin или postmaster. Обновить почтовые алиасы можно командой newaliases. Это может выглядеть следующим образом (символ # в начале строки отделяет строку комментариев):

# Обязательные алиасы: те, кто занимается проблемами электронной почты
postmaster: root MAILER.DAEMON: postmaster

* Персональный алиас: один пользователь под разными именами
President_FSF: stolmann ft Список рассылки Pirates: john_silver,
ben_gan@island.ocean.far

# Направление письма в файл Billy_Gates: /dev/null

* Перенаправление сообщения (декодировка сообщений, приходящих
закодированными) crypt:|/user/local/bin/decode

     Как правило, файл почтовых алиасов предназначен для всей системы, однако каждый пользователь может иметь личный файл в домашней директории (.forward), который содержит информацию о дальнейшей рассылке писем. Например, программа vacation создает .forward-файл для вывода сообщения об отлучке пользователя, поэтому ваша почта будет поступать (записываться) в почтовый ящик, а отправители будут получать заранее заложенное вами сообщение, типа "Ну нету меня!" Вот как должен выглядеть подобный .forward-файл:

\eltsin, "|/usr/ucb/vacation eltsin"

     Этот файл полезен и тогда, когда вы можете смотреть почту только с другого адреса (с другой машины). В этом случае выручит .forward-файл для автоматической пересылки поступающих писем по новому адресу.

     Программа sendmail имеет три режима работ:

  • режим выполнения команд, или -b (become);
  • режим диагностики работы, или -v (verbose);
  • режим отладки, или -d (debugging). Режим выполнения команд задается следующим набором опций программы:
  • -ba - использовать старый ARPAnet-протокол;
  • -bd - стать демоном (daemon) и "слушать" приходящие по SMTP сообщения (синоним команды: smtpd);
  • -bi - обновить почтовые алиасы (синоним: newaliases);
  • -bm - стать отправителем почты;
  • -bр - напечатать почтовую очередь (синоним: mailq);
  • -bs - перевод SMTP на стандартный вывод (синоним: bsmtpd);
  • -bt - тестирование адреса;
  • -bv - проверка без отсылки;
  • -bz - заморозить конфигурацию.

     Режим диагностики распечатывает этапы доставки почты, с тем чтобы выяснить, где случились проблемы. Режим отладки позволяет пользователю варьировать количество получаемой информации. Его вызов выглядит так: sendmail -dкатегория.уровень.категория..., где уровень - целое число от 0 до 127, причем более высокий уровень соответствует большему количеству отладочной информации, а категория - целое число или диапазон (например 0-99). По умолчанию используется режим -d0-99.1. Категория отладки -d0 является основной, -d6 включает информацию о не отправляемой почте, -d21 трассирует правила переписывания адресов, a -d30 трассирует создание заголовка. Сведения об основных категориях - см. man.

     Одна статья, естественно, не может объять такое необъятное, как программа sendmail, но автор надеется, что данный обзор хоть сколько-нибудь поможет читателям представить, как она устроена. Зачастую этого бывает достаточно, так как дальше... дальше "нет ничего тайного, что не стало бы явным". И еще одно: не забудьте ознакомиться с документацией вашей версии sendmail.
Краткая история Sendmail в событиях из ее жизни.


1969 год -- Принятие ARPAnet и первого RFC.
1970 год -- Применение NCP (Network Control Protocol) в ARPA.
1974 год -- Разработан протокол TCP.
1976 год -- Разработан протокол UUCP (Unix-Unix CoPy).
1979 год -- Создание программы delivermail для сети Berknet, включенной в ARPAnet, в рамках проекта INGRESS и создание USENET (Network News).
1981 год -- Создание BitNet (Because It's Time NETwork) и CSNET (Computer Science NETwork).
1982 год -- Включение протоколов ARPA в семейство TCP/IP и создание Eunet (European Unix NETwork).
1984 год -- Создан Domain Name Server.
1986 год -- Создана NSFNET и разработан протокол NNTP (Network News Transfer Protocol).
1987 год -- Создание IDA (Institutionen Datavetenskap).
1989 год -- Создание MCI Mail.
1991 год -- UIUC IDA 5.65c, доступна с ftp.uu.net.
1993 год -- Sendmail V8.6, доступна с ftp.cs.berkley.edu.

...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!