Подсистема протокола SMTP является основным диспетчером событий COM. Ядро подсистемы протокола SMTP отвечает за все стандартные операции обмена данными по протоколу SMTP и обрабатывает основную часть расширений служб SMTP. В частности, ядро подсистемы SMTP обслуживает стандарт ESMTP, определенный в документах RFC 821 и RFC 1869. С помощью событий протокола можно вносить изменения в протокол SMTP, добавляя новые команды ESMTP и даже меняя действие уже существующих команд. В сервере Exchange Server 2007 на базе этих событий реализованы уникальные для Exchange расширенные команды SMTP, позволяющие обмениваться данными с другими серверами Exchange в организации более эффективно, чем по стандартному протоколу SMTP.

Чтобы проверить, загружены ли расширенные команды SMTP для Exchange Server 2007, подключитесь к TCP-порту виртуального сервера SMTP с помощью служебной программы telnet. Ответ сервера на команду EHLO, отправленную для установки соединения ESMTP, содержит список функций, поддерживаемых виртуальным сервером SMTP. Список стандартных команд можно получить с помощью команды HELP.

В таблице ниже описаны функции SMTP, поддерживаемые расширенной службой SMTP в сервере Exchange.

Функции SMTP, поддерживаемые в сервере Exchange Server 2007

Ответ сервера SMTP Примечания

8BITMIME

Указывает на то, что локальный виртуальный сервер SMTP поддерживает 8-битные сообщения в формате MIME.

AUTH, AUTH GSSAPI NTLM LOGIN и AUTH=LOGIN

Говорит о том, что локальный виртуальный сервер SMTP поддерживает расширение службы проверки подлинности SMTP. Дополнительные сведения после ключевого слова AUTH определяют поддерживаемые механизмы проверки подлинности.

BDAT, CHUNKING

Аналог команды DATA, принимающий два аргумента. Если виртуальный сервер дает на команду EHLO ответ CHUNKING, это означает, что он поддерживает команду BDAT и готов принимать сообщения, разбитые на фрагменты.

Первый аргумент определяет длину пакета двоичных данных и предназначен для того, чтобы узлу SMTP не приходилось выполнять постоянный поиск конца данных. Сервер-получатель считает количество байт в сообщении, и как только размер сообщения становится равным значению, отправленному командой BDAT, сервер считает, что все данные сообщения получены. Второй аргумент указывает на то, является ли пакет данных последним пакетом в текущем сеансе обмена. Этот аргумент необязателен.

BINARYMIME

Указывает на то, что виртуальный сервер SMTP принимает сообщения с двоичными данными без транспортной кодировки. В этих сообщениях должен использоваться параметр BODY, в котором вместе с командой MAIL должно быть значение BINARYMIME. Принимая команду MAIL со значением BINARYMIME в параметре BODY, сервер SMTP говорит о своей готовности сохранять все биты в каждом из октетов, передаваемых ему с помощью команды BDAT. Расширение BINARYMIME протокола SMTP можно использовать только с командой CHUNKING.

DATA

Отправляется удаленным узлом для начала передачи содержимого сообщения.

DSN

Команда ESMTP для реализации уведомлений о состоянии доставки согласно стандарту, описанному в документе RFC 1891.

EHLO

Отправляется клиентом для начала сеанса ESMTP. В ответе на команду EHLO сервер может обозначить свою поддержку команд ESMTP.

ETRN

Отправляется сервером SMTP локальному виртуальному серверу в качестве запроса на отправку всех находящихся в очереди сообщений электронной почты для доменов, указанных в команде ETRN.

HELO

Отправляется клиентом для собственной идентификации, как правило — с именем домена, и служит сигналом для начала обычного сеанса SMTP.

HELP

Возвращает список команд SMTP, поддерживаемых виртуальным сервером SMTP в обычных сеансах SMTP (в отличие от сеансов ESMTP).

MAIL

Определяет начало передачи сообщений, указывая на отправителя сообщения; используется в форме MAIL FROM.

PIPELINING

Позволяет отправлять поток команд, не ожидая ответа после каждой отдельной команды.

QUIT

Сигнализирует о завершении обычного или расширенного сеанса SMTP.

RCPT

Указывает на получателей сообщения; используется в форме RCTP TO.

RSET

Обнуляет всю транзакцию по передаче сообщения и сбрасывает содержимое буфера.

SIZE

Предоставляет механизм, с помощью которого виртуальный сервер SMTP может указать максимальный поддерживаемый размер сообщений. Совместимые сервера должны указывать расширения размеров, определяющие максимальный размер принимаемых сообщений. Удаленные узлы не должны отправлять сообщения, превышающие указанный сервером размер.

STARTTLS

Указывает на то, что сервер SMTP поддерживает безопасный протокол SMTP через TLS. Расширение службы SMTP для безопасного протокола SMTP через TLS определено в документе RFC 2487.

TURN

Позволяет удаленному и локальному узлам поменяться ролями для отправки почты в обратном направлении, не устанавливая новое соединение.

VRFY

Проверяет, доступен ли почтовый ящик для доставки в него сообщений. К примеру, команда VRFY TED проверяет, если ли на локальном сервере почтовый ящик пользователя Ted. По умолчанию эта команда доступна в Exchange 2007, однако она не выполняет проверку пользователей. Сервер информирует удаленный узел о том, что хотя проверить наличие пользователя невозможно, сообщение будет принято. Ответ сервера дается в следующем формате: 252 2.1.5 Cannot VRFY user, but will take message for Ted@wingtiptoys.com 

XEXCH50

Дает возможность отправлять расширенные свойства конверта передачи сообщений в формате MDBEF в сеансе обмена данными серверов Exchange 2007.

X-EXPS GSSAPI NTLM LOGIN, X-EXPS=LOGIN

X-EXPS — это команда, уникальная для Exchange. Она аналогична команде AUTH, поскольку указывает на способы, которыми серверы с Exchange 2007, Exchange 2003 и Exchange 2000 могут пройти проверку подлинности:

GSSAPI — метод Generic Security Services Application Programming Interface, обеспечивающий проверку подлинности с использованием протокола Kerberos;

NTLM — метод Windows NT и LAN Manager, обеспечивающий проверку подлинности с использованием протокола запроса и подтверждения Windows NT;

LOGIN — метод AUTH LOGIN, обеспечивающий проверку подлинности в режиме обычного текста с использованием имени пользователя и пароля в кодировке base-64.

X-LINK2STATE

Добавляет в службу SMTP поддержку функции распространения сведений о состоянии связи. Подробные сведения об алгоритме состояния связи, используемом для распространения сведений о состоянии связи в пределах групп маршрутизации и между ними, см. в статье Message Routing Architecture (на английском языке).

Примечание.
Все команды SMTP, уникальные для сервера Exchange, начинаются с префикса «X-» (без кавычек). Если эти команды отсутствуют в списке, отправляемом виртуальным сервером SMTP в ответ на команду EHLO, на сервере запущена служба SMTP на базе Windows Server. В этом случае повторно установите Exchange Server 2007 вместе со всеми пакетами обновления.

Категории событий протокола

Подсистема протокола SMTP вызывает события протокола для управления обменом данными между узлами. События, которые могут возникать при таком обмене данными по протоколу SMTP, можно разделить на три категории, перечисленные ниже.

  • Служба SMTP получает команду SMTP

    Эти события возникают в ситуации, когда удаленный узел или клиент SMTP подключается к локальной службе SMTP и устанавливает сеанс с помощью команды HELO или EHLO. События в этой категории — это события OnInboundCommand протокола SMTP для входящих подключений.

  • Служба SMTP получает ответ SMTP

    Эти события возникают в ситуации, когда локальная служба SMTP получает от удаленного узла или клиента SMTP ответ на исходящие команды SMTP. События в этой категории — это события OnServerResponse протокола SMTP для исходящих подключений.

  • Служба SMTP отправляет команду SMTP

    Эти события возникают в ситуации, когда локальная служба SMTP подключается к удаленному узлу SMTP и устанавливает сеанс для передачи сообщений. События в этой категории — это события OnSessionBegin, OnMessageStart, OnPerRecipient, OnBeforeData и OnSessionEnd для исходящих подключений.

В таблице ниже описано назначение каждого из событий протокола SMTP.

События протокола в службе SMTP

Событие Примечания

OnInboundCommand

Возникает в ситуации, когда служба SMTP получает команду SMTP, в результате давая журналу событий возможность ответить.

OnServerResponse

Возникает в ситуации, когда служба SMTP получает ответ SMTP на ранее отправленную команду SMTP.

OnSessionBegin

Возникает перед отправкой команды EHLO.

OnMessageStart

Возникает перед отправкой команды MAIL FROM.

OnPerRecipient

Возникает перед отправкой команды RCPT TO.

OnBeforeData

Возникает перед отправкой команды DATA.

OnSessionEnd

Возникает перед отправкой команды QUIT.

Расширения протокола SMTP, уникальные для сервера Exchange

Программа установки Exchange Server 2007 регистрирует расширения SMTP, уникальные для Exchange и реализующие перечисленные ниже функции протокола SMTP.

XEXCH50

XEXCH50 — это расширение ESMTP, предназначенное для передачи определенных свойств сообщений, таких как свойств конвертов, сообщений и получателей. Команда XEXCH50 является короткой командой. За командой XEXCH50, на которую получен ответ типа «успешно», следует большой двоичный объект переменного размера. (Его размер соответствует первому аргументу команды XEXCH50.)

Эта функция реализована с использованием девяти журналов событий и обеспечивает полное взаимодействие между двумя серверами с Exchange. В таблице ниже события протокола сопоставлены с соответствующими журналами событий XEXCH50. Все журналы XEXCH50 реализованы в файле Peexch50.dll, который находится в каталоге Program Files\Exchsrvr\bin.

Расширения протокола для команды XEXCH50

Журнал событий Событие протокола Примечания

Журнал события, возникающего перед приемом данных в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnBeforeData

Извещает журнал XEXCH50 о том, что сейчас будет отправлена команда протокола DATA. У журнала XEXCH50 появляется возможность послать службе SMTP запрос на отправку команды XEXCH50 для начала сеанса обмена данными XEXCH50.

Журнал входящего события EHLO в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnInboundCommand

Извещает журнал XEXCH50 о получении команды EHLO.

Журнал входящей команды XEXCH50 в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnInboundCommand

Реализует команду XEXCH50 для начала сеанса обмена данными XEXCH50.

Журнал входящей команды MAIL в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnInboundCommand

Реализует команду MAIL в рамках сеанса обмена данными XEXCH50.

Журнал входящей команды MAIL в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnInboundCommand

Дает локальному виртуальному серверу SMTP возможность получить сведения о получателе в рамках входящего сеанса обмена данными XEXCH50.

Журнал входящего события PerRecipient в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnPerRecipient

Дает локальному виртуальному серверу SMTP возможность отправить сведения о получателе в рамках исходящего сеанса обмена данными XEXCH50.

Журнал события ответа на команду EHLO в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnServerResponse

Дает локальному виртуальному серверу SMTP возможность получить ответ на команду EHLO, отправленную удаленному узлу. Ответ от удаленного узла может указывать на поддержку обмена данными в рамках сеанса XEXCH50. Сервер Exchange включает команду XEXCH50 в список поддерживаемых команд, возвращаемых подключающемуся узлу.

Журнал события ответа на команду XEXCH50 протокола SMTP на сервере Exchange

OnServerResponse

Дает локальному виртуальному серверу SMTP возможность получить ответ на ранее отправленную исходящую команду XEXCH50. К примеру, если локальная служба SMTP отправила команду XEXCH50 без предварительной проверки подлинности, удаленный сервер даст следующий ответ: 504 Need to authenticate first («Необходимо сначала пройти проверку подлинности»).

Журнал события ответа на команду RCPT в рамках сеанса XEXCH50 протокола SMTP на сервере Exchange

OnServerResponse

Дает локальному виртуальному серверу SMTP возможность получить от удаленного сервера Exchange сведения о состоянии для каждого получателя, указанного в исходящей команде RCPT. Адрес получателя может быть указан в неправильном формате, либо у сервера могли возникнуть проблемы с передачей данных. Если сведения о получателе правильные, удаленный виртуальный сервер SMTP возвращает адрес локальной службе SMTP вместе со сведениями о состоянии, например: 250 2.1.5 administrator@tailspintoys.com.

X-LINK2STATE

Команды и ответы X-LINK2STATE являются специальными расширениями SMTP. Эта команда уникальна для сервера Exchange и предназначена для обмена сведениями о топологии маршрутизации между SMTP-серверами Exchange. Максимальный размер любой команды и ответа X-LINK2STATE составляет 1024 байта. Этот размер часто и является фактическим размером команд и ответов X-LINK2STATE.

Эта функция реализована с использованием пяти журналов событий. При этом один из них используется для двух разных событий, как следует из таблицы ниже. Все журналы событий X-LINK2STATE реализованы в файле Xlsasink.dll, который находится в каталоге \Program Files\Exchsrvr\bin.

Расширения протокола для команды X-LINK2STATE

Журнал событий Событие протокола Примечания

Журнал входящей команды EHLO для XLSA

OnInboundCommand

Извещает журналы событий X-LINK2STATE о получении входящей команды EHLO.

Журнал входящей команды X-LSA

OnInboundCommand

Извещает журналы событий X-LINK2STATE о получении входящей команды X-LINK2STATE.

Журнал X-LSA

OnMessageStart, OnSessionEnd

Сигнализирует о начале (команда MAIL) или завершении (команда QUIT) входящего сеанса обмена данными X-LINK2STATE. Поскольку удаленный виртуальный сервер SMTP является конечным получателем передаваемых пакетов Orginfo, нет необходимости указывать получателей с помощью исходящей команды RCPT. Этот журнал событий передает сведения о состоянии связи.

Журнал для ответа X-LSA

OnServerResponse

Отвечает на входящую команду X-LINK2STATE отправкой данных о порядке передачи сведений о состоянии связи. Пример такого ответа: 200 LAST CHUNK={00000029} MULTI (5) ({00000010} DONE_RESPONSE); этот ответ указывает на последний фрагмент данных, отправленный этим виртуальным сервером SMTP.

Журнал для ответа EHLO для X-LSA

OnServerResponse

Отвечает на входящую команду EHLO, отправляя в ответе сервера список команд X-LINK2STATE

X-EXPS

X-EXPS — это команда, уникальная для Exchange и аналогичная в то же время команде AUTH. При этом нет никаких ограничений на максимальный размер или количество фрагментов данных. Синтаксис команд и ответов зависит от выбранного пакета AUTH (LOGIN, NTLM, GSSAPI и др.). Дополнительные сведения см. в документе RFC по команде AUTH.

Хотя аббревиатура EXPS означает Exchange Protocol Security (безопасность протокола Exchange), единственным протоколом, который она поддерживает, является SMTP. Некоторые из команд, используемых в Exchange 2000 Server и Exchange Server 2003, уникальны для этих продуктов и используются вместе с командами ESMTP. Они также называются командами ESMTP X.

Эти возможности реализованы с использованием пяти приемников событий, перечисленных в таблице ниже. Все расширения безопасности протокола реализованы в файле Exps.dll, который находится в каталоге Program Files\Exchsrvr\bin.

Расширения безопасности протокола X-EXPS

Журнал событий Событие протокола Примечания

Журнал EXPS-EOD расширения безопасности протокола SMTP на сервере Exchange

OnInboundCommand

Сигнализирует о завершении передачи данных ( _EOD).

Журнал EXPS-Aux расширения безопасности протокола SMTP на сервере Exchange

OnInboundCommand

Сигнализирует о том, что сейчас будет получена команда AUTH.

Журнал команды EHLO расширения безопасности протокола SMTP на сервере Exchange

OnInboundCommand, OnServerResponse

Сигнализирует о том, что сейчас будет получена команда EHLO, и отвечает на эту команду, отправляя в ответе сервера список команд X-EXPS.

Журнал команды MAIL расширения безопасности протокола SMTP на сервере Exchange

OnInboundCommand, OnServerResponse, OnMessageStart

Указывает на начало передачи данных. Этот журнал событий реализован для всех действительных вариантов использования команды MAIL. Журнал обрабатывает события, сигнализирующие о скором поступлении команды MAIL, отвечает на входящую команду MAIL и отправляет исходящую команду MAIL.

Журнал команды EXPS расширения безопасности протокола SMTP на сервере Exchange

OnInboundCommand, OnServerResponse, OnSessionStart

Указывает на начало сеанса X-EXPS. Этот журнал событий реализован для всех действительных вариантов использования команды X-EXPS. Журнал обрабатывает события, сигнализирующие о скором поступлении команды X-EXPS, отвечает на входящую команду X-EXPS и отправляет исходящую команду X-EXPS.

Борьба со спамом

Эта функция реализована с использованием трех журналов событий, обрабатывающих сведения об отправителе и получателе для входящих подключений SMTP и перечисленных в таблице ниже. Журналы событий для борьбы со спамом реализованы в файле Turflist.dll, который находится в каталоге \Program Files\Exchsrvr\bin.

Расширения SMTP для борьбы со спамом

Журнал событий Событие протокола Примечания

Журнал входящей команды RCPT

OnInboundCommand

Сигнализирует о поступлении входящей команды RCPT с адресом получателя, который необходимо проверить.

Журнал входящей команды MAIL для TURF

OnInboundCommand

Сигнализирует о поступлении входящей команды MAIL с адресом отправителя, который необходимо проверить.

Журнал входящей команды EOD

OnInboundCommand

Сигнализирует о поступлении входящей команды _EOD.

X-ANONYMOUSTLS

Этот параметр является новым в Exchange 2007. Он позволяет выбрать входящий либо исходящий анонимный сертификат TLS. Сервер Exchange запрашивает у службы каталогов Active Directory отпечаток сертификата, хранящийся на сервере. Отпечаток сертификата хранится в атрибуте msExchServerInternalTLSCert объекта сервера. Если атрибут msExchServerInternalTLSCert не может быть прочитан или имеет значение null, Exchange не объявляет X-ANONYMOUSTLS в сеансе SMTP, а сертификаты не загружаются.

XLONGADDR

Этот параметр является новым в Exchange 2007. Он позволяет соединителю приема принимать длинные почтовые адреса X.400. Почтовые адреса X.400 инкапсулируются в почтовые адреса SMTP с использованием способа инкапсуляции IMCEA (Internet Mail Connector Encapsulated Address).

Если данный параметр имеет значение $False, полный почтовый адрес SMTP может содержать не более 571 знака.

Если он имеет значение $True, вступают в силу следующие изменения:

  • в ответе EHLO соединителя приема объявляется ключевое слово XLONGADDR;

  • допустимая длина строки сеанса SMTP увеличивается до 8000 знаков;

  • SMTP-команды MAIL FROM: и RCPT TO: принимают действительные длинные адреса.

Таким образом, после инкапсуляции IMCEA почтовые адреса X.400 могут содержать до 1860 знаков.

Описываемый параметр может иметь значения $True и $False. Значением по умолчанию является $False. Изменять значение этого параметра можно только на соединителях получения, настроенных на транспортных серверах-концентраторах.

XRDST

Этот параметр является новым в Exchange 2007. Это расширение протокола предназначено для отправки на удаленный сервер сведений о целевой точке маршрута для данного сообщения. Если удаленный сервер не объявляет команду XRDST, а отправляемое сообщение требует поддержки XRDST, в журнале событий регистрируется событие MSExchangeTransport с кодом 2021. Символическое имя этого события — tuple_SmtpSendUnableToTransmitRDst. Это событие указывает на то, что сообщение не удается отправить.

EXPS EXCHANGEAUTH GSSAPI NTLM

Этот параметр является новым в Exchange 2007. Это расширение службы соединителей приема по умолчанию, объявляемое после команды X-ANONYMOUSTLS.

X-EXCHANGEAUTH SHA256

Этот параметр является новым в Exchange 2007. Это расширение службы соединителей приема по умолчанию, объявляемое после команды X-ANONYMOUSTLS.