До начала взаимодействия отправитель и получатель почтового сообщения устанавливают между собой двусторонний канал связи (режим On-line). Получатель почты может быть либо конечным адресатом, либо промежуточным звеном в цепи передачи почты. Команды SMTP генерируются отправителем и посылаются получателю, который на них отвечает. Таким образом отправитель выступает в роли клиента, а получатель - в роли сервера. Обмен инструкциями ведется в ASCII-кодах. Команды и ответы не чувствительны к регистру. То есть команда или ответ могут быть в верхнем регистре, в нижнем регистре, или любой смесью верхнего и нижнего регистров.
В протоколе 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. То есть отправитель становится получателем и наоборот. Однако получатель может отвергнуть эту команду.
Начало создания курса: Mondy, 19-Aug-1996 10:12:15 NOVST
Дата последней модификации: Monday, 16-Oct-2000 21:53:27 NOVST
© 1996 - 2003, А.М.Федотов
© 1996 - 2003, Институт вычислительных технологий СО РАН, Новосибирск