Подсистема протокола 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 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.