РД 45.134-2000, часть 2
Не все функции, содержащиеся в данном приложении, обязательны для ТС служб ЭП по протоколу SMTP , но если они выполняются, то их реализация должна соответствовать настоящему приложению.
2. Функциональные требования к SMTP
2.1. Соединения
2.1.1. Протокол нижнего уровня
При использовании TCP для организации соединения клиента и сервера должен использоваться порт 25. При кодировании сообщений SMTP должно учитываться, что соединение TCP поддерживает длину байта 8 бит. Семибитные символы сообщений SMTP должны быть выровнены вправо, а старший бит октета установлен в 0.
2.1.2. Установление соединений.
В результате запроса клиента передатчик SMTP устанавливает дуплексное соединение с приемником SMTP.
Протокол SMTP должен предоставлять механизм передачи почты непосредственно с узла передающего клиента на узел получающего клиента при условии, что эти два узла соединены единой транспортной службой.
Протокол SMTP должен предоставлять механизм передачи почты путем пересылки между одним и более серверами SMTP, если два узла клиентов не соединены единой транспортной службой.
2 .2. Взаимодействие
По запросу клиента передатчик SMTP устанавливает дуплексное соединение транспортного уровня с приемником SMTP. Приемник SMTP может быть либо промежуточным узлом, либо оконечным узлом адресата. Приемник и передатчик обмениваются командами и ответами.
После установления соединения транспортного уровня приемник должен выдать ответ приветствия 220.
Первой командой в сессии должна быть команда HELO.
Последней командой сессии должна быть команда QUIT.
Элементы взаимодействия по протоколу SMTP приведены в п.8.
3. Сообщения
Сообщения SMTP, посылаемые передатчиком SMTP приемнику SMTP, называются командами. Сообщения SMTP, посылаемые приемником SMTP передатчику SMTP, называются ответами.
Команды и ответы состоят из символов кода ASCII.
3.1. Команды
Командами являются символьные строки, заканчивающиеся <CRLF>. Команды состоят из кода команды и последующего поля аргументов. Коды команды и аргументы должны быть разделены одним или более пробелами. Регистр символов кода команды и названий параметров, таких как "to:" или "from:", не является существенным. Регистр аргументов прямого и обратного пути является существенным. Поле аргумента состоит из строки символов переменной длины, заканчивающееся <CRLF>.
3.1.1. Перечень команд
Перечень команд SMTP приведен в табл. 1
Таблица 1
Перечень команд SMTP
Команда |
HELO < domain> |
Аргументы |
domain - имя узла передатчика SMTP |
Описание |
Используется для идентификации передатчика SMTP приемником SMTP. |
Действия c буферами |
Все таблицы состояний и буферы очищены. |
Команда |
MAIL FROM:< reverse-path> |
Аргументы |
reverce-path – обратный путь. Состоит из списка узлов и почтового ящика отправителя. |
Описание |
Указывает на передачу почты. Наличие списка узлов в обратном пути показывает, что данное почтовое сообщение было переслано через каждый из указанных узлов. Данный список используется в качестве маршрута для пересылки недоставленной почты отправителю. При каждой пересылке пересылающий узел добавляет свое имя в начало списка. Если узел имеет несколько имен, должно использоваться имя, известное в системе назначения. |
Действия c буферами |
Очищаются буферы обратного пути, буферы прямого пути, буфер данных почты. В буфер обратного пути помещается данные аргумента команды. |
|
|
Команда |
RCPT TO:< forward-path> |
Аргументы |
forward-path - прямой путь. Состоит из списка узлов и почтового ящика адресата |
Описание |
Идентифицирует индивидуального получателя данных почты. Несколько получателей определяются использованием множества команд RCPT. Наличие списка узлов в прямом пути указывает, что почтовое сообщение должно быть передано следующему узлу из списка. Если приемник SMTP не поддерживает функцию пересылки, он должен выдать ответ 550 (неизвестный локальный клиент). При передаче почтового сообщения передающий узел должен удалить свое имя из списка прямого пути. При достижении почтовым сообщением оконечного адресата (при этом прямой путь будет содержать только имя почтового ящика) приемник SMTP должен поместить почтовое сообщение в почтовый ящик с именем, указанным в прямом пути. |
Действия c буферами |
Аргумент прямого пути добавляется в буфер прямого пути |
Команда |
DATA |
Аргументы |
- |
Описание |
Приемник обрабатывает строки, следующие за этой командой как данные почты, направляемой от передатчика. Полученные почтовые данные добавляются к буферу данных. Почтовые данные должны заканчиваться последовательностью "<CRLF>.<CRLF>". После окончания получения почтовых данных сервер начинает их обработку с использованием информации из буфера обратного пути, прямого пути и буфера почтовых данных. По окончании выполнения данной команды эти буферы должны быть очищены. В случае удачного выполнения команды приемник должен выдать ответ OK. Когда приемник SMTP получает почтовое сообщение для пересылки или для окончательной доставки, он должен вставлять в начало почтовых данных линию штампа времени. В штампе времени должны указываться: узел-отправитель, узел - получатель (приемник данной команды), дата и время получения сообщения. Когда приемник SMTP выполняет окончательную доставку почтового сообщения, он должен вставлять в начало почтовых данных информацию о линии обратного пути. Вставляемая информация должна быть взята из аргумента "обратный путь" команды MAIL. В случае, если пересылка почты выполнена только частично (только части указанных адресатов), сервер SMTP должен выдать ответ OK и извещения о непересланных сообщениях. Может быть либо одно извещение с перечнем всех неудачных адресатов, либо для каждого неудачного адресата должно быть выслано отдельное извещение. Все извещения о недоставке должны посылаться с помощью команды MAIL. |
Действия c буферами |
Буферы обратного пути, прямого пути и буфер данных сбрасываются. |
Команда |
SEND FROM:<reverse-path> |
Аргументы |
reverse-path - обратный путь |
Описание |
Используется для инициации транзакции, в которой почта доставляется одному или более терминалам. Обратный путь может состоять из необязательного списка узлов и имени почтового ящика отправителя. Если присутствует список узлов, он указывает на узлы, через которые пересылалось данное почтовое сообщение. Данный список используется для посылки отправителю извещений о недоставке. |
Действия c буферами |
Буферы обратного пути, прямого пути и буфер данных сбрасываются. Информация из аргумента обратного пути вставляется в буфер обратного пути. |
Команда |
SOML FROM:<reverse-path> |
Аргументы |
reverse-path - обратный путь |
Описание |
Используется для инициации транзакции, в которой почта доставляется одному или более терминалам или почтовым ящикам. Данные почты для каждого адресата доставляются на терминал, если он активен, или в почтовый ящик в противном случае. Назначение аргумента аналогично команде SEND. |
Действия c буферами |
Буферы обратного пути, прямого пути и буфер данных сбрасываются. Информация из аргумента обратного пути вставляется в буфер обратного пути. |
Команда |
SAML FROM:<reverse-path> |
Аргументы |
Reverse-path - обратный путь |
Описание |
Используется для инициации транзакции, в которой почта доставляется одному или более терминалам и почтовым ящикам. Данные почты для каждого адресата доставляются на терминал, если он активен, и обязательно в почтовый ящик. Назначение аргумента аналогично команде SEND. |
Действия c буферами |
Буферы обратного пути, прямого пути и буфер данных сбрасываются. Информация из аргумента обратного пути вставляется в буфер обратного пути. |
Команда |
RSET |
Аргументы |
- |
Описание |
Показывает, что текущая транзакция должна быть прекращена, все запомненные данные уничтожены, все буферы очищены. Приемник должен ответить OK. |
Действия c буферами |
Все сохраненные данные уничтожаются, все буферы сбрасываются. |
Команда |
VRFY <string> |
Аргументы |
string – предполагаемое имя клиента |
Описание |
Данная команда просит приемник подтвердить, что аргумент идентифицирует клиента. Если аргумент содержит имя клиента, приемник должен выдать ответ с полным именем клиента, если оно известно, и полным именем почтового ящика. |
Действия c буферами |
- |
Команда |
EXPN <string> |
Аргументы |
string – предполагаемый идентификатор списка рассылки |
Описание |
Данная команда просит приемник подтвердить, что аргумент идентифицирует список рассылки. Если аргумент содержит список рассылки, приемник должен выдать многострочный ответ с перечнем полных имен клиентов, если они известны, и полных имен почтовых ящиков, занесенных в данных список рассылки. |
Действия c буферами |
- |
Команда |
HELP [<string>] |
Аргументы |
string - имя команды |
Описание |
По данной команде приемник должен выдать ответ с полезной для передатчика информацией. |
Действия c буферами |
- |
Команда |
NOOP |
Аргументы |
- |
Описание |
Нет операции. Приемник должен выдать ответ OK. |
Действия c буферами |
- |
Команда |
QUIT |
Аргументы |
- |
Описание |
Приемник должен выдать ответ OK и закрыть соединение. |
Действия c буферами |
Сброс всех данных и буферов. |
Команда |
TURN |
Аргументы |
- |
Описание |
Приемник должен либо выдать ответ OK и взять на себя роль передатчика, либо выдать ответ отказа 502 и остаться в роли приемника. Если обмен ролями произошел, процесс, ставший приемником высылает ответ приветствия 220. |
Действия c буферами |
Сброс всех данных и буферов. |
3.1.2. Синтаксис команд определен в п.5.
3.1.3. Команды: HELO, MAIL, RCPT, DATA, RSET, NOOP, QUIT должны быть реализованы обязательно.
3.1.4. Обеспечение прозрачности передачи данных в команде DATA
При посылке передатчиком данных почты каждую последовательность "<CRLF>." (0x0D 0x0A 0x2E ) передатчик должен заменять на "<CRLF>.."(0x0D 0x0A 0x2E 0x2E ). Приемник должен выполнять обратное преобразование. Указатель конца почтовых данных этому преобразованию не подвергается.
3.2. Ответы
3.2.1. Код ответа
Ответ SMTP состоит из трехзначного кода ответа (передаваемого как три символа), за которым следует текст.
Значения номера ответа:
первая цифра
1 |
Положительный предварительный ответ |
2 |
Положительный окончательный ответ |
3 |
Положительный промежуточный ответ |
4 |
Временный отрицательный окончательный ответ |
5 |
Постоянный отрицательный окончательный ответ |
вторая цифра
0 |
Ошибки синтаксиса |
1 |
Запрос информации |
2 |
О состоянии соединения |
3 |
не определен |
4 |
не определен |
5 |
О состоянии почтовой системы |
третья цифра позволяет сделать более точное разделение значений ответов по функциональным категориям, определенным второй цифрой.
Ответ сервера может состоять из одной или нескольких строк.
Однострочный ответ состоит из:
трехзначного номера ответа, передаваемого как три символа,
символа <SP>,
текста,
символа <CRLF> .
Многострочный ответ состоит из:
трехзначного номера ответа, передаваемого как три символа,
символа "-"
текста первой строки
символа <CRLF>
трехзначного номера ответа, передаваемого как три символа,
символа "-"
текста второй строки
символа <CRLF>
.....
трехзначного номера ответа, передаваемого как три символа,
символа <SP>,
текста последней строки,
символа <CRLF> .
Список кодов ответов приведен в табл. 2. Для всех ответов, кроме 110, текст ответа не обязательно должен соответствовать приведенному в табл. 2.
Таблица 2
Список кодов ответов
Код |
Текст |
211 |
Системный статус или ответ системной помощи |
214 |
Ответ помощи |
220 |
<домен> Служба готова |
221 |
<домен> Служба закрывает соединение |
250 |
Запрошенное действие выполнено успешно |
251 |
Клиент не локальный, направлено в <прямой путь> |
354 |
Начинаю получение почтовых данных. Конец при <CRLF>.<CRLF> |
421 |
<домен> Служба не доступна, закрываю соединение |
450 |
Запрошенное действие не принято. Почтовый ящик недоступен (например, занят) |
451 |
Запрошенное действие прервано. Локальная ошибка выполнения. |
452 |
Запрошенное действие не принято. Недостаточно памяти. |
500 |
Синтаксическая ошибка, команда не распознана |
501 |
Синтаксическая ошибка в параметре или аргументах |
502 |
Команда не реализована |
503 |
Неправильная последовательность команд. |
504 |
Аргумент команды не реализован |
550 |
Запрошенное действие не принято. Почтовый ящик не доступен (например, не найден) |
551 |
Клиент не локальный. Пожалуйста, попробуйте <прямой путь> |
552 |
Запрошенное действие прервано. Превышен лимит памяти. |
553 |
Запрошенное действие не принято. Неправильное имя почтового ящика. |
554 |
Ошибка транзакции. |
3.3. Порядок команд и ответов
Первой командой в сессии должна быть команда HELO. Если аргумент команды HELO является неприемлемым, должен быть выдан ответ 501 и приемник SMTP должен остаться в прежнем состоянии.
Команды NOOP, HELP, EXPN, VRFY могут использоваться в любое время в течении сессии.
Команды MAIL, SEND, SOML, SAML начинают транзакцию. Если аргумент команды начала транзакции является неприемлемым, приемник должен выдать ответ 501 и остаться в прежнем состоянии. Во время транзакции должны использоваться команды в следующей последовательности: одна или несколько команд RСPT, одна команда DATA. Транзакция может быть прервана командой RSET. В течение сессии может быть 0, 1 или более транзакций. Если во время транзакции команды выдаются с нарушением указанного порядка, приемник должен выдать ответ 503 и остаться в прежнем состоянии.
Последней командой сессии должна быть команда QUIT. Команда QUIT может быть выдана в любое время в течение сессии.
На каждую команду должен выдаваться точно один ответ.
В п.6 и п.7 определяются допустимые последовательности команд и ответов .
3.4. Ограничения на размер элементов сообщений SMTP
Ограничения на размер элементов сообщений SMTP приведены в табл. 3
Таблица 3
Ограничения на размер элементов сообщений SMTP.
Обозначение элемента |
Элемент |
Максимальный размер |
User |
имя клиента |
64 символов |
Domain |
имя домена |
64 символов |
Path |
обратный путь или прямой путь |
256 символов |
Command line |
Строка команды включая символы <CRLF> |
512 символов |
reply line |
Строка ответа включая код ответа и символы <CRLF> |
512 символов |
text line |
Строка данных почты, включая символы <CRLF>, но не считая символы точки, добавленные для обеспечения прозрачности |
1000 символов |
Recipient buffer |
Емкость буфера адресатов |
100 адресатов |
4. Описание синтаксиса команд и ответов
<HELO> ::= "HELO" 1*<SP> <domain> <CRLF>
<MAIL> ::= "MAIL" 1*<SP> "FROM:" <reverse-path> <CRLF>
<RCPT> ::= "RCPT" 1*<SP> "TO:" <forward-path> <CRLF>
<DATE> ::= "DATA" <CRLF>
<RSET> ::= "RSET" <CRLF>
<SEND> ::= "SEND" 1*<SP> "FROM:" <reverse-path> <CRLF>
<SOML> ::= "SOML" 1*<SP> "FROM:" <reverse-path> <CRLF>
<SAML> ::= "SAML" 1*<SP> "FROM:" <reverse-path> <CRLF>
<VRFY> ::= "VRFY" 1*<SP> <string> <CRLF>
<EXPN> ::= "EXPN" 1*<SP> <string> <CRLF>
<HELP> ::= "HELP" [1*<SP> <string>] <CRLF>
<NOOP> ::= "NOOP" <CRLF>
<QUIT> ::= "QUIT" <CRLF>
<TURN> ::= "TURN" <CRLF>
<reverse-path> ::= <path>
<forward-path> ::= <path>
<path> ::= "<" [ <a-d-l> ":" ] <mailbox> ">"
<a-d-l> ::= <at-domain> | <at-domain> "," <a-d-l>
<at-domain> ::= "@" <domain>
<domain> ::= <element> | <element> "." <domain>
<element> ::= <name> | "#" <number> | "[" <dotnum> "]"
<mailbox> ::= <local-part> "@" <domain>
<local-part> ::= <dot-string> | <quoted-string>
<name> ::= <a> <ldh-str> <let-dig>
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig> ::= <a> | <d>
<let-dig-hyp> ::= <a> | <d> | "-"
<dot-string> ::= <string> | <string> "." <dot-string>
<string> ::= <char> | <char> <string>
<quoted-string> ::= """ <qtext> """
<qtext> ::= "\" <x> | "\" <x> <qtext> | <q> | <q> <qtext>
<char> ::= <c> | "\" <x>
<dotnum> ::= <snum> "." <snum> "." <snum> "." <snum>
<number> ::= <d> | <d> <number>
<CRLF> ::= <CR> <LF>
<CR> ::= символ возврата каретки (код ASCII 13)
<LF> ::= символ следующей строки (код ASCII 10)
<SP> ::= символ пробела (код ASCII - 32)
<snum> ::= одна, две или три десятичные цифры, представляющие
десятичное число в диапазоне от 0 до 255
<a> ::= любой из 52 алфавитных строчных и прописных
символа от A до Z и от a до z
<c> ::= любой из 128 символов ASCII кроме
<special> or <SP>
<d> ::= любая из 10 цифр от 0 до 9
<q> ::= любой из 128 символов ASCII кроме <CR>,
<LF>, кавычек ("), или (\)
<x> ::= любой из 128 символов ASCII
<special> ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "."
| "," | ";" | ":" | "@" """ | управляющие
символы (коды ASCII от 0 до 31 включительно, а так же
127)
Примечание 1: символ "\" указывает на то, что следующий за ним
специальный символ интерпретируется "буквально", а не в соответствии с обычной интерпретацией.
Примечание 2: для именования узлов используются две дополнительные
числовые формы. Первая форма состоит из символа "#" , за которым следует
целое десятичное число, являющееся адресом узла. Вторая форма состоит из 4-х
целых десятичных чисел, разделенных точками и заключенных в квадратные
скобки. Вторая форма соответствует адресу IP.
<return-path-line> ::= "Return-Path:" <SP><reverse-path><CRLF>
<time-stamp-line> ::= "Received:" <SP> <stamp> <CRLF>
<stamp> ::= <from-domain> <by-domain> <opt-info> ";"
<daytime>
<from-domain> ::= "FROM" <SP> <domain> <SP>
<by-domain> ::= "BY" <SP> <domain> <SP>
<opt-info> ::= [<via>] [<with>] [<id>] [<for>]
<via> ::= "VIA" <SP> <link> <SP>
<with> ::= "WITH" <SP> <protocol> <SP>
<id> ::= "ID" <SP> <string> <SP>
<for> ::= "FOR" <SP> <path> <SP>
<link> ::= Стандартные имена соединений (links) ,
зарегистрированные в организации Network
Information Center
<protocol> ::= Стандартные имена протоколов, зарегистрированные
в организации Network Information Center
<daytime> ::= <SP> <date> <SP> <time>
<date> ::= <dd> <SP> <mon> <SP> <yy>
<time> ::= <hh> ":" <mm> ":" <ss> <SP> <zone>
<dd> ::= однозначное или двузначное десятичное число,
обозначающее день в диапазоне от 1 до 31
<mon> ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" |
"JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
<yy> ::= двузначное десятичное число, обозначающее год столетия
в диапазоне от 00 до 99
<hh> ::= двузначное десятичное число, обозначающее часы дня в
диапазоне от 00 до 23
<mm> ::= двузначное десятичное число, обозначающее минуты часа в
диапазоне от 00 до 59
<ss> ::= двузначное десятичное число, обозначающее секунды
минуты в диапазоне от 00 до 59
<zone>
::= "UT" для Универсального Времени (по умолчанию)
или другого часового пояса в соответствии с RFC
822[2]
5. Последовательность команд и ответов
Используются следующие сокращения:
I - промежуточный положительный ответ
S - успешное выполнение
F - неудача
E - ошибка
Установление соединения
S: 220
F: 421
HELO
S: 250
E: 500, 501, 504, 421
S: 250
F: 552, 451, 452
E: 500, 501, 421
RCPT
S: 250, 251
F: 550, 551, 552, 553, 450, 451, 452
E: 500, 501, 503, 421
DATA
I: 354 -> data -> S: 250
F: 552, 554, 451, 452
F: 451, 554
E: 500, 501, 503, 421
RSET
S: 250
E: 500, 501, 504, 421
SEND
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SOML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SAML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
VRFY
S: 250, 251
F: 550, 551, 553
E: 500, 501, 502, 504, 421
EXPN
S: 250
F: 550
E: 500, 501, 502, 504, 421
HELP
S: 211, 214
E: 500, 501, 502, 504, 421
NOOP
S: 250
E: 500, 421
QUIT
S: 221
E: 500
TURN
S: 250
F: 502
E: 500, 503
6. Диаграммы состояний сервера SMTP
Диаграмма состояний сервера SMTP для команд HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP, NOOP, QUIT, TURN приведены на рис. 1. Диаграмма состояний сервера SMTP для команды DATA приведена на рис.2.
Используемые сокращения на рис.1 и рис.2 :
B - Начало
S - Успешное выполнение
F - Неудача
E - Ошибка
W - Ожидание ответа
data - серия линий с данными почты, посылаемых от передатчика приемнику.
M - Среднее состояние
Цифрами обозначены возможные номера ответов, что соответствует первой цифре трехзначного кода ответа, как это описано в пункте 4. 2.1.
Рис. 1 Диаграмма состояний сервера SMTP для команд HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP, NOOP, QUIT, TURN.
Рис. 2 Диаграмма состояний сервера SMTP для команды DATA .
7. Описание процедур SMTP
На рис. 3 . показана схема соединений при взаимодействии SMTP.
Рис. 3 . Схема соединений при взаимодействии SMTP.
Рассматривают следующие процедуры SMTP во время взаимодействия SMTP:
транзакция,
направление,
верификация,
доставка в почтовый ящик
доставка на терминал клиента,
открытие и закрытие соединения
7. 1. Открытие и закрытие соединения
Для открытия соединения используется команда HELO. Этой командой идентифицируется узел передатчика SMTP.
HELO <домен>
Для закрытия соединения используется команда: QUIT
Во время соединения приемник и передатчик могут поменяться ролями. Для этого используется команда TURN. Инициатором обмена ролями должен быть передатчик. Для отказа обмена используется ответ 502. Данная команда не должна использоваться в случае, если в качестве протокола транспортного уровня используется TCP.
7. 2. Транзакция.
В результате запроса клиента передатчик SMTP устанавливает дуплексное соединение с получателем SMTP. Приемником SMTP может быть либо адресат, либо промежуточный пункт.
Сразу после установления соединения передатчик SMTP посылает команду MAIL, указывающую отправителя почты. Если приемник SMTP может принять почту, он отвечает OK. После этого передатчик SMTP посылает команду RCPT, указывающую получателя почты. Если приемник SMTP может принять почту для данного получателя, он отвечает OK. Если нет, он высылает ответ, отклоняющий данного получателя (но не всю транзакцию). Передатчик SMTP и приемник SMTP могут согласовать нескольких получателей. После завершения согласования получателей, передатчик SMTP отправляет данные почты, заканчивающиеся определенной последовательностью. Если приемник SMTP успешно обработал полученные данные, он отвечает OK.
Таким образом транзакция состоит из трех шагов, что отображено на табл. 4.
Таблица 4
Шаги транзакции
Шаг транзакции |
Команда |
Описание шага транзакции |
1. |
MAIL from:<обратный путь> |
На данном шаге происходит идентификация отправителя, сброс всех таблиц состояния и буферов. Устанавливается обратный путь, используемый для передачи сообщений об ошибках. Если приемник SMTP принимает данную команду, от выдает ответ 250 OK. |
2. |
RCPT to: <прямой путь 1> .... .... RCPT to: <прямой путь N> |
На данном шаге идентифицируется один или больше адресатов. Каждая команда RCPT идентифицирует одного адресата. Если приемник SMTP принимает команду RCPT, он выдает ответ 250 OK. Если адресат неизвестен, приемник SMTP выдает ответ 550 Failure. Описанный шаг повторяется для каждого адресата. |
3. |
DATA |
Если приемник SMTP принимает данную команду, он выдает ответ 354 Intermediate. Следующие за командой DATA строки приемник SMTP воспринимает как текст почтового сообщения. После того, как все строки приняты и запомнены, приемник SMTP выдает ответ 250 OK. |
Пример процедуры Транзакция:
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: Blah blah blah...
S: ...etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 OK
7.3 . Направление
В случаях, когда информация аргумента <прямой путь> команды RCPT оказывается некорректной, но приемник SMTP знает адресат, должны использоваться следующие ответы:
251 Клиент не локальный. Сообщение переслано в <прямой путь>
551 Клиент не локальный. Попробуйте <прямой путь>
В первом случае приемник SMTP сам пересылает сообщение и затем информирует клиента в том, что в следующий раз он должен использовать указанный в ответе прямой путь.
Во втором случае клиенту будет возвращена ошибка, и клиент сам должен повторить отправку сообщения с указанием нового прямого пути.
7.4. Верификация
Для предоставления возможностей верификации пользователей и списка рассылки существуют команды VRFY и EXPN.
По команде VRFY приемник по введенному имени клиента выдает полное имя клиента и имя его почтового ящика.
По команде EXPN приемник по идентификатору списка рассылки выдает многострочный ответ, содержащий полные имена клиентов и имена их почтовых ящиков, включенных в данный список рассылки.
7.5 . Доставка в почтовый ящик и доставка на терминал клиента
Доставка почты на терминал клиента осуществляется командой
SEND from:<обратный путь>
Если адресат неактивен или не принимает почтовое сообщение, отправитель получит ответ 450.
Команда SOML позволяет доставить почту на терминал клиента, если он активен и принимает сообщения, или оставить в почтовом ящике, в противном случае.
Команда SAML позволяет доставить почту на терминал клиента (если он активен) и поместить ее в почтовый ящик.
7.6. Пересылка
При пересылке сообщений сервер SMTP добавляет свой идентификатор в обратный путь, удаляет первый элемент прямого пути в случае, если он совпадает с его идентификатором. Сообщение пересылается на узел, соответствующий первому элементу прямого пути.
Если сервер SMTP взял на себя задачу пересылки почты и позднее обнаружил, что почта по какой-либо причине не может быть доставлена, он должен составить извещение о невозможности доставить почту и выслать его отправителю. Сервер SMTP не должен высылать извещения о проблемах пересылки извещений. Для этого при отправке извещения используется команда с нулевым обратным путем.
Приложение 2
Технические требования к техническим средствам службы электронной почты по протоколу pop3
1. Область применения
Настоящее приложение описывает технические требования к ТС службы ЭП по протоколу POP3 в соответствии с RFC 1939 [3] и RFC 1734[4] .
В приложении приведен удаленный доступ пользователей по сети передачи данных общего пользования к функциям сервера электронной почты .
Не все функции, содержащиеся в данном приложении, обязательны для ТС служб ЭП по протоколу POP3 , но если они выполняются, то их реализация должна соответствовать настоящему приложению.