Home

Page 11
Page 11
background image

это вполне возможно? И почему бы не использовать в качестве флага окончания 
письма такую комбинацию байтов, которая не  сможет встретиться в письме и не 
иметь   подобной   проблемы   вообще?   Выбор   флага   из   «нормальных», 
«печатаемых»   символов   не   сложно   понять   –   это   сделано   для   того,   чтобы 
пользователи   могли   писать   письма   с   помощью   своего   терминала   (без   всяких 
почтовых   клиентов,   которые   при   формировании   письма   вставят   в   него 
произвольные   байты),   на   котором   необходимо   набрать   с   клавиатуры   флаг 
окончания письма. Как бороться с ситуацией, когда в теле письма встретится 
точка,   единственная   в   строке?   Для   этого   в   стандарте   предусмотрен   очень 
простой   механизм   экранирования   –   если   в   тексте   письма   встречается 
комбинация байтов {CR LF .} то после {.} ставится еще одна {.} и тогда в том 
случае,   если   единственная   в   строке   точка   встречается   в   тесте   письма,   она 
передается как CR LF . . CR LF, что не приводит к тому, что сервер воспринимает 
данную   комбинацию   символов   как   признак   окончания   письма.   Когда   сервер 
получает письмо, в котором  встречается комбинация {CR LF .}, он отбрасывает 
СЛЕДУЮЩУЮ точку, если же ее нет, то в таком случае далее будет идти CR LF и 
сервер   рассматривает   это   как   признак   окончания   письма,   вообще   говоря, 
ситуаций,  когда в письме  следует комбинация  байтов  {CR  LF  . произвольный 
байт} быть не может, после точки может следовать только либо {.} либо {CR 
LF}. Вспомним, подобный способ экранирования применялся в протоколе SLIP.

Итак, клиент начал почтовую транзакцию командой  MAIL, продолжил ее 

одной или несколькими  командами  RCPT, затем дал команду  DATA  и передал 
серверу письмо, которое закончил комбинацией {CR LF . CR LF}. Что происходит 
дальше?   Дальше   клиент   может   начать   еще   одну   транзакцию,   снова   подав 
команду MAIL.

Рассмотрим теперь некоторые другие команды протокола  SMTP. Начнем с 

команды  QUIT.   Данная   команда   передается   клиентом   без   аргументов   и 
призывает   сервер   разорвать   соединение   с   клиентом.   Данная   команда 
передается тогда, когда клиент больше не имеет потребности иметь соединение 
с сервером, клиент не должен разрывать соединение посылкой сегмента  TCP  с 
флагами FIN, ACK, вместо этого он должен  послать серверу SMTP команду QUIT 
и после этого сервер разрывает соединение.

Следующая важная команда – RSET. Данная команда может быть передана 

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

Клиент отправляет команду:
MAIL FROM:author@next.ru<CR><LF>
После   этого   клиент   передумал   отправлять   письмо   от   данного   имени   и 

хочет передать  письмо  от  другого  имени.  Клиент   не  имеет  права   дать  новую 
команду MAIL, она не может перегрузить предыдущую поданную команду MAIL. 
Вместо этого клиент должен передать команду 

RSET<CR><LF>
После этого клиент  может передавать новую команду  MAIL,  так как  все 

предыдущие   команды   в   рамках   данной   транзакции   отменены.   Рассматриваем 
еще   один   пример   использования   данной   команды,   пусть   клиент   уже   передал 
серверу следующие команды:

MAIL FROM:author@next.ru<CR><LF>
RCPT TO:user@mail.ru<CR><LF>
После этого клиент передумал посылать письмо данному пользователю, но 

как мы знаем использование второй команды RCPT приводит к тому, что письмо 


Copyright © 2022 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.