
- •7.1 Формат почтовых сообщений, мiме
- •7.2 Модель работы smtp
- •Пользователь
- •7.3 Ретрансляция сообщений
- •7.4 Расширения smtp-сервиса для передачи 8-битных данных
- •7.5 Взаимодействие smtp с транспортным протоколом tcp
- •7.6 Принципы работы
- •7.7 Протокол iмар4
- •7.8 Атрибуты сообщений системы (map)
- •Основные команды
7.4 Расширения smtp-сервиса для передачи 8-битных данных
В предыдущих разделах мы рассматривали работу SMTPс 7-битными сообщениями. Такие сообщения поддерживаются всеми серверамиSMTP. Поэтому, если информация, которую необходимо передать, содержит не толькоASCII-символы,а отправитель не знает, какая почтовая система у его адресата, он, как правило, кодирует всю передаваемую информацию в 7-битный вид. Например, если и отправитель и получатель поддерживаютMIME, объекты сообщения можно представить в кодировках "quoted-printable" или "base64".
Однако, если SMTP-серверадресата поддерживает расширенияSMTP(ESMTP) для передачи 8-битных данных в формате "MIME8bit", отправитель может не беспокоиться о кодировании и передавать поSMTPвсе 8бит.
Для того чтобы проверить, поддерживает ли SMTP-серверрасширения "MIME 8bit",отправьте команду приветствияEHLO —это прототип команды HELOдля ESMTP.Ответом на это приветствие должны быть строчки"250OK" и "2508В1ТМ1МЕ":
С: EHLO <client.domain>
S: 250-<server.domain> says hello
S: 250 8В1ТМ1МЕ
Примечание
В ESMTPкомандаMAILприобрела новый аргумент:BODY, который может принимать значения: "7В1Т" или "8В1ТМ1МЕ".
Подайте команду MAILс аргументом "BODY=8BITMIME". Если сервер отвечает кодом "250",начинайте передавать 8-битные данные. Ниже представлен пример сценария передачи 8-битных данных через ESMTP:
С: EHLO ymir.claremont.edu
S: 250-dbc.mtview.ca.us says hello
S: 250 8В1ТМ1МЕ
С: MAIL FROM;<ned@ymir.claremont.edu> BODY=8BITMIME
S: 250 <ned@ymir.claremont.edu>... Sender and 8BITMIME ok
C: RCPT T0:<mrose@dbc.mtview.ca.us>
S: 250 <mrose@dbc.mtview.ca,us>... Recipient ok
С; DATA
S: 354 Send 8BITMIME message, ending in CRLF.CRLF.
. . .
C: ,
S: 250 OK
Однако при выборе такого способа передачи необходимо помнить, что формат данных MIME-сообщениядолжен быть "8bit", т. е. остаютсявсиле ограничения на размер строки SMTP-сообщения,которая составляет 1000байт.
Для преодоления этого неприятного ограничения на размер строки и передачи по SMTPтипа "binary" рисунков, видео и др. больших массивов бинарных данных, служит еще одно расширениеSMTP, часто называемое какCHUNKING.
CHUNKING-сервисиспользует вместо старой командыDATAрасширенную команду—BDAT. Данное расширение поддерживает как типы 7bit.8BITMIMEтак иBINARYMIME, который и позволяет передавать большие объемы двоичных данных.
Для того чтобы узнать, поддерживает ли данный SMTP-серверсервисCHUNKING, подайте команду приветствияEHLO. Если ответ содержит строку "250CHUNKING", это значит, что серверSMTPможет работать с командой BDAT.Команда BDAT —это простое расширение функциональности командыDATA, т. е. вы можете без каких-либо ограничений при отправке 7-битных данных вместоDATAиспользовать команду BDAT.
Примечание
Нельзя использовать команды DATAи BDATв одной SMTP-транзакции.
Команда BDATимеет следующий формат:
BDAT chunk-size [LAST]
где <chunk-size> —размер порции передаваемых данных, а ключевое словоLASTуказывает, что следующая порция информации —последняя.
Для того чтобы отправить данные в формате BINARYMIME, команда отправки —MAILдолжна содержать параметрBODY=BINARYMIME. Затем, используя команду BDAT,передавайте вашу информацию. Ниже представлен пример передачи большого бинарного файла (R —получатель, S —отправитель SMTP-сообщения).
R: <wait for connection on TCP port 25>
S: <open connection to server>
R: 220 server, esmtp. us SMTP service ready S: EHLO client, edu
R: 250-server.esmtp.us says hello R: 250-PIPELINING R: 250-BINARYMIME R: 250 CHUNKING
S: MAIL FROM:<one@client.edu> BODY=BINARYMIME S: RCPT T0:<two@server.esmtp.us> R: 250 <one@client.edu>... Sender and BINARYMIME ok R: 250 <two@server.esmtp.us>. . . Recipient ok S: BDAT 100000
S: (First 10000 octets of canonical MIME message data) S: BDAT 324 LAST
S: (Remaining 324 octets of canonical MIME message data) R: 250 100000 bytes received R: 250 Message OK, 100324 octets received
S: QUIT R: 221 Goodbye
Эти способом вы можете пользоваться и при передаче 7-битных данных.