SMTP - Simple Mail Transfer Protocol
Модель протокола

До начала взаимодействия отправитель и получатель почтового сообщения устанавливают между собой двусторонний канал связи (режим On-line). Получатель почты может быть либо конечным адресатом, либо промежуточным звеном в цепи передачи почты. Команды SMTP генерируются отправителем и посылаются получателю, который на них отвечает. Таким образом отправитель выступает в роли клиента, а получатель - в роли сервера. Обмен инструкциями ведется в ASCII-кодах. Команды и ответы не чувствительны к регистру. То есть команда или ответ могут быть в верхнем регистре, в нижнем регистре, или любой смесью верхнего и нижнего регистров.

Процедуры SMTP

В протоколе SMTP определено несколько видов взаимодействия между отправителем и получателем почтового сообщения, называемых процедурами или дисциплинами.Наиболее распространенной процедурой является отправка почтового сообщения (почтовая транзакция), которая начинается по команде MAIL, идентифицирующей отправителя:

    MAIL <SP> FROM:<reverse-path> <CRLF>
Эта команда сообщает получателю о начале новой почтовой транзакции и дает ему адрес отправителя <reverse-path>, ипользуемый в случае возникновения ошибок. Если получатель готов принять почту он отвечает <OK>.

Вторая команда определяет адресата:

    RCPT <SP> TO:<forward-path> <CRLF>
В случае передачи сообщения нескольким адресатам, эта команда повторяется нужное количество раз. Если получатель может принимать почту для данного адресата он отвечает <OK>, иначе он отклоняет его ( но не всю почтовую транзакцию ).

После того, как корреспондент и адресат определены, подается команда

    DATA
Она вводится без параметров и определяет начало передачи почтового сообщения. Сообщение передается до тех пор пока не будет отправлена строка, содержащяя только точку. Это говорит получателю о завершении транзакции и он переходит к обработке полученного сообщения.

Ниже приведен пример обмена сообщениями при отправке почты:

S-sender (отправитель), R-receiver (получатель).


            S: MAIL FROM:<Smith@Alpha.ARPA>
            R: 250 OK

            S: RCPT TO:<Jones@Beta.ARPA>
            R: 250 OK

            S: RCPT TO:<Green@Beta.ARPA>
            R: 550 No such user here

            S: RCPT TO:<Brown@Beta.ARPA>
            R: 250 OK

            S: DATA
            R: 354 Start mail input; end with <CRLF>.<CRLF>
            S: Hello from Smith!
            S: ...etc. etc. etc.
            S: <CRLF>.<CRLF>
            R: 250 OK

Другой процедурой SMTP является перенаправление почтового сообщения (forwarding). Бывают случаи, когда адресат, указанный в <forward-path>, не найден. Тогда, если сервер знает правильный адрес, он отсылает по нему сообщение. Если он может сделать только предположение о дальнейшей рассылке, то лишь предлагает свой вариант. Передачи не происходит. Рассмотрим примеры ответов:


      S: RCPT TO:<Postel@USC-ISI.ARPA>
      R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>

 или

      S: RCPT TO:<Paul@USC-ISIB.ARPA>
      R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>

Процедуру верификации сотавляют команды VRFY и EXPN. По команде VRFY сервер подтверждает наличие или сообщает об отсутствии указанного пользователя. Приведем несколько примеров:


   1.      S: VRFY Smith
            R: 250 Fred Smith <Smith@USC-ISIF.ARPA>

   2.      S: VRFY Smith
            R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>

   3.      S: VRFY Jones
            R: 550 String does not match anything.

   4.      S: VRFY Jones
            R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>

   5.      S: VRFY Gourzenkyinplatz
            R: 553 User ambiguous.
В последнем примере рассмотрен случай существования нескольких пользователей с одинаковыми именами.

Команда EXPN позволяет получить список пользователей какой-либо группы, отдела и т.п. Можно просто получить список местных пользователей:


            S: EXPN Example-People
            R: 250-Jon Postel <Postel@USC-ISIF.ARPA>
            R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>
            R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>
            R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
            R: 250-<joe@foo-unix.ARPA>
            R: 250 <xyz@bar-unix.ARPA>
  или
            S: EXPN Executive-Washroom-List
            R: 550 Access Denied to You.

Существует возможность отправлять сообщения сразу на терминал пользователя, если он активен, а также комбинировать прямую рассылку с рассылкой в почтовый ящик(mailbox). Для этих целей служат команды

  SEND <SP> FROM:<reverse-path> <CRLF>
отправка на терминал,
  SOML <SP> FROM:<reverse-path> <CRLF>
отправка на терминал, если пользователь активен, а иначе в его почтовый ящик,
  SAML <SP> FROM:<reverse-path> <CRLF>
отправка и на терминал, и в ящик.

При желании пользователь может отключить возможность поставки сообщения на терминал. Механизм использования этих команд полностью совпадает с использованием команды MAIL

Для инициализации канала обмена почтой и его закрытия используются команды:

   HELO <SP> область <CRLF> 
этой командой отправитель называет себя (что-то наподобие "Привет, я <Такой-то>").
   QUIT <CRLF>

для прекращения взаимодействия и закрытия канала связи.

Приведем пример

   Инициализация
         R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
         S: HELO USC-ISIF.ARPA
         R: 250 BBN-UNIX.ARPA

   Закрытие
         S: QUIT
         R: 221 BBN-UNIX.ARPA Service closing transmission channel

Если сообщение по каким-либо причинам не может быть разослано, получатель информирует об этом отправителя примерно следующим письмом


         S: MAIL FROM:<>
         R: 250 ok
         S: RCPT TO:<@HOST.ARPA:JOE@HOST.ARPA>
         R: 250 ok
         S: DATA
         R: 354 send the mail data, end with .
         S: Date: 23 Oct 81 11:22:33
         S: From: SMTP@REMOTE.ARPA
         S: To: JOE@HOST.ARPA
         S: Subject: Mail System Problem
         S:
         S:   Sorry JOE, your message to SAM@HOSTXXX.ARPA lost.
         S:   HOSTXXX.ARPA said this:
         S:    "550 No Such User"
         S: .
         R: 250 ok

Кроме перечисленных дисциплин протокол позволяет отправителю и получателю меняться ролями друг с другом. Происходит это по команде TURN. То есть отправитель становится получателем и наоборот. Однако получатель может отвергнуть эту команду.

Назад


ИВТ Федотов А.М. Введение в Internet
Документация по Интернет технологиям

Начало создания курса: Mondy, 19-Aug-1996 10:12:15 NOVST
Дата последней модификации: Monday, 16-Oct-2000 21:53:27 NOVST
© 1996 - 2003, А.М.Федотов
© 1996 - 2003, Институт вычислительных технологий СО РАН, Новосибирск