Программа Sendmail
Основным средством рассылки почты в Internet является программа sendmail.
Она обеспечивает работу модульной системы рассылки, которая предназначена
для получения и отправки корреспонденции, а также управления программами
подготовки и просмотра почтовых сообщений. Sendmail позволяет организовать
почтовую службу локальной сети и обмениваться почтой с другими серверами
почтовых служб через специальные шлюзы. Sendmail может быть сконфигурирована
для работы с различными почтовыми протоколами. Обычно это протоколы UUCP
(Unix-Unix-CoPy) и SMTP (Simple Mail Transfer Protocol).
Sendmail работает как «отделение связи» обычной почтовой службы, которое
принимает и пересылает почтовые сообщения. Sendmail может интерпретировать
два типа почтовых адресов:
- почтовые адреса SMTP;
- почтовые адреса UUCP.
Первые являются стандартными адресами Internet и, фактически, являются
стандартом де-факто. Именно этот адрес обычно указан на визитных карточках.
Sendmail можно настроить для поддержки:
- списка адресов-синонимов;
- списка адресов рассылки пользователя;
- автоматической рассылки почты через шлюзы;
- очередей сообщений для повторной рассылки почты в случае
отказов при рассылке;
- работы в качестве SMTP-сервера;
- доступа к адресам машин через сервер доменных имен
BIND;
- доступа к внешним серверам имен.
Принцип работы программы sendmail
Sendmail отправляет почту в два приема: сначала почтовые сообщения собираются
в очереди, а затем отсылаются.
Каждое сообщение состоит из трех частей: конверта, заголовка и тела сообщения.
Конверт. Конверт состоит из адреса отправителя,
адреса получателя и информации рассылки, которая используется программами
подготовки, рассылки и получения почты. Конверт остается невидимым для
отправителя и получателя почтового сообщения.
Заголовок. Заголовок состоит из стандартных
текстовых строк, которые содержат адреса, информацию о рассылке и данные.
Заголовок может быть частью подготовленного пользователем текстового файла,
а может быть подготовлен и добавлен к телу сообщения программой подготовки
почты. Данные из заголовка могут быть использованы для оформления конверта
сообщения.
Тело сообщения. Первая пустая строка в файле
почтового сообщения отделяет заголовок от тела сообщения. Все, что следует
после этой строки, называется телом сообщения и передается по почте без
изменений.
Sendmail может быть вызвана:
- программой подготовки сообщений для отправки уже подготовленных
сообщений;
- программой получения почты для пересылки полученной
из сети почты;
- непосредственно пользователем для отправки по почте
файла или короткого сообщения;
- почтовым демоном, которым обычно является сама sendmail.
После того, как почта собрана, начинается ее рассылка. При этом выполняются
следующие действия:
- адреса отправителя и получателя преобразуются в формат
сети-получателя почты;
- если необходимо, то в заголовок сообщения добавляются
строки, позволяющие получателю отвечать на принятое сообщение (например:
FROM: <адрес>);
- почта передается одной из программ рассылки почты.
Когда программа приема почты получает сообщение, она передает его программе
sendmail для последующей рассылки. Если сообщение достигло машины адресата,
то оно отправляется программой местной рассылки в почтовый ящик пользователя.
Первый этап рассылки -- сбор сообщений. Sendmail
получает почтовые сообщения из трех источников:
- командной строки или стандартного ввода;
- через SMTP-протокол (из сети);
- из очереди сообщений.
При получении сообщений из командной строки или стандартного ввода,
sendmail вызывается пользователем с указанием адреса доставки сообщения.
При этом выполняются следующие действия: определяется адрес отправителя,
выбирается из командной строки адрес получателя и оба адреса преобразуются
в соответствии с описанием файла конфигурации, определяется способ доставки
сообщения, размещается заголовок в оперативной памяти для последующих
преобразований, а тело сообщения размещается во временном файле для отправки
без изменений.
При получении сообщений по протоколу SMTP, sendmail используется как программа
клиента и сервера протокола. Протокол определен в RFC-821 и является основным
для рассылки почты в Internet. В этом случае sendmail запускается как
демон, который «слушает» порт TCP и в случае получения сообщения устанавливает
соединение с удаленным клиентом SMTP. Как правило, таким клиентом является
другая программа sendmail.
Программа подготовки почты на локальной машине также может использовать
SMTP. Для этого sendmail открывает канал (pipe) межпроцессного обмена.
При получении сообщений из очереди используются временные файлы очередей.
Эти очереди используются для хранения неразосланных сообщений. Сообщение
хранится в двух файлах. В одном файле хранится тело сообщения, а в другом
конверт и заголовок сообщения. Обычно sendmail опрашивает очереди через
определенные администратором почтового сервера промежутки времени, на
предмет наличия в них неразосланных сообщений.
Вторая стадия рассылки почты -- рассылка сообщений.
Как только одним из описанных выше способов sendmail получила сообщение,
делается попытка его отправить по адресу. Для этого sendmail определяет
три параметра: программу рассылки, узел сети и получателя. Эта процедура
производится по правилам, которые содержатся в файле конфигурации. Sendmail
сохраняет одну копию тела сообщения во временном файле, а заголовок загружает
в оперативную память. Для каждого сообщения программа доставки (рассылки)
сообщений вызывается отдельно. Если сообщение должно быть доставлено на
разные машины, то для каждой из машин также вызывается своя программа
доставки. Некоторые программы могут обслуживать сразу несколько абонентов
одной машины, если это невозможно, то для каждого абонента вызывается
также своя программа доставки. Рассматривают два типа рассылки: на удаленную
машину и местную рассылку.
Рассылка на удаленную машину. Для вызова программы
рассылки sendmail открывает pipe и запускает программу рассылки, командная
строка которой находится в файле конфигурации. Sendmail записывает заголовок
и тело сообщения в pipe. Если программа рассылки не использует протокол
SMTP, то адрес получателя передается через pipe. Если используется SMTP,
то открывается двунаправленный канал для интерактивного взаимодействия
с удаленным сервером SMTP. Если в качестве транспортного протокола используется
TCP, то sendmail не запускает внешнюю программу рассылки, а сама инициирует
TCP-соединение с удаленным сервером SMTP.
Доставка местной почты. Если sendmail определяет,
что адреса доставки местные, то происходит обращение к файлу адресных
синонимов и производится преобразование адресов (расширение). Файл адресных
синонимов можно использовать для перенаправления почты в файлы или для
обработки местными программами. Пользователь может иметь и свой собственный
файл адресных синонимов для управления рассылкой персональной почты. После
преобразования адресов почта отправляется программе местной рассылки (например
rmail).
Важным моментом при работе sendmail является алгоритм определения типа
адресов. При использовании стандартного файла конфигурации применяются
следующие правила: почта рассылается в соответствии с форматом адреса
получателя, адреса при этом бывают местные, UUCP и SMTP.
Местные адреса имеют вид:
user
user@localhost
user@localhost.localdomain
user@alias
user@alias.localdomain
user@[local. host. intemet. add ress ]
localhost!user
localhost!localhost! user
user@localhost.uucp
Местный адрес -- это адрес, который распознается как адрес машины, с
которой осуществляется отправка почты.
Адреса UUCP имеют вид:
ost!user
host!host!user
user@host.uucp
Если машина, с которой отправляется почта, имеет прямую линию связи по
протоколу UUCP со следующей машиной (в адресе), то почта передается на
эту машину, если такого соединения нет, то почта не рассылается и выдается
сообщение об ошибке. Файл конфигурации должен содержать детальное описание
маршрутов для пересылки сообщений на машины по протоколу UUCP.
Адреса SMTP -- это адреса, описанные в стандарте RFC-822 или стандартные
адреса Internet. Эти адреса имеют вид:
usr@host
usr@host.domain
<@host1,@host2,@host3:user@host4>
user@[remote.host's.internet.address]
Почта с адресами SMTP рассылается по протоколу SMTP.
Если в системе для адресации используется Berkeley Internet Name Domain
(BIND) сервер, то sendmail может определять адреса получателей, используя
сервис BIND. Если BIND не используется, то sendmail сама определяет адреса.
При рассылке почты можно использовать и смешанную адресацию:
user%hostA@hostB -
почта отправляется с машины hostB на машину hostA;
user!hostA@hostB - почта отправляется с машины
hostB на машину hostA;
hostA!user%hostB - почта отправляется с hostA
на hostB.
Подводя итог обсуждению принципов работы sendmail, следует специально
подчеркнуть тот факт, что почта реально рассылается двумя принципиально
разными способами. При использовании протокола UUCP почта рассылается
по принципу «stop-go», т.е. сообщения передаются от машины к машине по
указанному в адресе пути. Следует ясно представлять, если почта ушла с
машины отправителя, то это не означает, что она поступит получателю. Промежуточная
машина может вернуть почту назад, если не сможет разослать. Электронная
почта действительно работает как система обычной почты, физически перемещая
и храня сообщения на промежуточных почтовых станциях. При работе по протоколу
SMTP почта реально отправляется только тогда, когда установлено интерактивное
соединение с программой-сервером на машине-получателе почты. При этом
происходит обмен командами между клиентом и сервером протокола SMTP в
режиме on-line. При смешанной адресации доставка почты происходит по смешанному
сценарию. Как шла доставка и как маршрутизировалось сообщение можно определить
из заголовка сообщения, которое вы получили.
Анализ типа адресов в программе sendmail -- это самый главный процесс,
т.к. по типу адреса получателя sendmail определяет каким способом сообщение
будет разослано. Вызов программы доставки вмонтирован в правила преобразования
адресов отправителя и получателя. При этом как только система решит, что
дальнейшее преобразование аdдреса нецелесообразно, так сразу вызывается
программа доставки. Наибольшее число сообщений об ошибках при рассылке
сообщений связано как раз с определением адреса получателя. В этом процессе
принимают участие, по крайней мере, два сервиса Internet: система рассылки
почтовых сообщений и служба доменных имен. Sendmail постоянно обращается
к службе доменных имен на предмет канонизации имен электронной почты сверяет
эти имена с теми, которые закреплены за компьютером, на котором данная
система установлена. Если имена совпадают, то осуществляется местная рассылка
по адресам местной почты.
|