2012-01-03 5 views
2

Мне нужно реализовать поддержку нескольких сообщений на одно соединение для моего SMTP-сервера.Протокол SMTP: несколько писем на одно соединение

Каждое сообщение заканчивается:

data 
<<content>> 
. 

И это логично, что состояние протокола должен быть сброшен в «после получения аутентификации» точки. Правильно ли это?

Вопрос: Возможно ли, что любой клиент отправляет сообщение с несколькими командами data? Позволяет ли стандарт?

+1

afaik для отправки нескольких сообщений, которые вы переходите к команде «mail from» после того, как вы получили ответ от вашей предыдущей команды «data», например. как вы сказали сразу после состояния AUTH – Gryphius

ответ

12

От RFC2821 ("Протокол Simple Mail Transfer"):

почтовые данные завершаются строкой, содержащей только период, что есть последовательность символов "" (см. раздел 4.5.2).

...

Получение индикатора завершения данных требует от сервера обработки сохраненной информации почтовой транзакции. Эта обработка потребляет информацию в буфере обратного пути, буфере прямого пути и буфере почтовых данных, а при завершении этой команды эти буферы очищаются.

i.e. после получения <CRLF>.<CRLF> сервер использует почтовые данные и очищает свои буферы; поэтому клиент не может, а затем отправить больше контента, связанного с сообщением, так как сервер забудет о сообщении.

...

После запуска, почтовая транзакция состоит из начинающей команды транзакции, одна или несколько команд RCPT и команду DATA, в таком порядке.

...

MAIL (или SEND, SOML или SAML) НЕ ДОЛЖЕН быть отправлен, если почтовая транзакция уже открыта, то есть, он должен быть послан только если не было начато не почтовой транзакции в сеансе , либо он успешно завершил успешную команду DATA, либо предыдущий был прерван с помощью RSET.

т.е. MAIL начинает новую транзакцию почты и успешную DATA команду (заканчивающуюся <CRLF>.<CRLF>) приходит к выводу, что; клиент может отправить другое сообщение.


От RFC4954 («Расширение SMTP для проверки подлинности»):

После команды AUTH была успешно завершена, не больше команд AUTH могут быть выпущены в одной и той же сессии. По завершении успешной команды AUTH сервер ДОЛЖЕН отклонить любые другие команды AUTH с ответом 503.

Проверка подлинности выполняется не чаще одного раза за сеанс и применяется до конца этого сеанса.

Смежные вопросы