Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Ах да, я же ещё не рассказал, что такое очередь! Ничего, скоро этот пробел будет восполнен…
Оставим на время наши процессы и разберёмся с базовыми принципами функционирования почтовой системы. В общем случае почтовый сервер может выполнять три рода операций: принимать сообщения для локальных клиентов, отправлять сообщения от локальных пользователей на удалённые серверы и осуществлять транзитную передачу от одного удалённого сервера к другому. Как правило, эти операции выполняются одной и той же системой, но рассматривать их удобнее всё же по очереди.
Кто кому родитель
Итак, при обработке сообщения для локального клиента, выполняется следующая последовательность действий (см. рис. 1):
1. Удалённый сервер, желая передать нам сообщение, отправляет запрос на соединение на 25-й порт нашего сервера.
2. Процесс sendmail, обслуживающий соединения (тот, который в примере выше имеет PID 596), порождает дочерний процесс (назовём его sm1).
3. Дочерний процесс sm1 проверяет возможность принять данное сообщение (анализируя конверт, прежде всего «rcpt to:») и в случае положительного ответа помещает сообщение в очередь, в файлы qf (заголовки) и df (тело сообщения). Причём qf обычно создаётся в памяти и записывается на диск только в случае невозможности переслать письмо сразу. То есть очередь – это каталог, куда временно сохраняются почтовые сообщения, проходящие через сервер электронной почты (по умолчанию используется /var/spool/mqueue).
4. Если запись пройдёт успешно, Sendmail подтверждает факт приёма сообщения (принимая тем самым на себя всю ответственность за его дальнейшую судьбу) и завершает соединение с удалённым сервером.
5. Далее sm1 анализирует заголовок сообщения и принимает решение о том, что нужно с ним делать. Если оно предназначено для локального пользователя, то вызывается локальный агент доставки, LDA (Local Delivery Agent), которому даётся поручение положить письмо в почтовый ящик пользователя.
6. Когда LDA успешно выполняет доставку, он рапортует об этом процессу sm1, который удаляет сообщение из очереди и завершает свою работу.
Рисунок 1. Приём сообщения
Передача сообщения от локального пользователя на удалённый сервер выполняется в следующем порядке (см. рис. 2):
1. Локальный клиент (MUA – Mail User Agent), такой как утилита mail, вызывает процесс send-mail (выступающий в роли MSA – Mail Submission Agent).
2. Процесс send-mail принимает сообщение, переданное клиентом, и подключается на 25-й порт хоста localhost.
3. Процесс, прослушивающий соединения на 25-м порту, порождает дочерний процесс sm1 для обработки данного соединения.
4. Sm1, приняв сообщение и поставив его в очередь, предпринимает попытку передать его получателю, для чего составляет маршрут движения письма и устанавливает соединение с первым сервером (в большинстве случаев он же является и последним, т.е. сервером, непосредственно обслуживающим домен получателя).