Exchange 2013 Bug: localized/custom system messages and transport rules

Всем привет!

В Exchange 2007/2010 существовала возможность изменить текст в системных сообщениях, таких как DSN или Quota Message. Пожалуй, самое интересное то, что можно было составить текс на различных языках и предоставить самому Exchange выбирать, на каком языке отправлять системные сообщения в зависимости от языковых настроек почтового ящика.

Exchange 2013, конечно же, не исключение, и все так же имеется возможность кастомизировать системные сообщения. Но пока это не работает.




Итак, создаем транспортное правило со следующими параметрами:

  • отправитель “msft@e13.lab
  • получатель: “test.user1@e13.lab
  • действие: отклонить сообщение с расширенным кодом (enhanced status code) 5.7.12

new_rule

Один интересный факт: в Exchange 2013 нельзя задать и Enhanced Status Code, и текст отбивки. В Exchange 2007/2010 это можно было сделать.

Тем не менее, после сохранения правила, текст все же пишется, но стандартный:

reject_text_eac

Get-TransportRule "Reject Test Rule" | fl *reject*


RejectMessageEnhancedStatusCode   : 5.7.12
RejectMessageReasonText           : Delivery not authorized, message refused
SmtpRejectMessageRejectText       :
SmtpRejectMessageRejectStatusCode :

Так же добавляем кастомизированное системное сообщения для расширенного кода “5.7.12”:

New-SystemMessage -DsnCode '5.7.12' -Internal:$true -Language ru -Text "Russian text"

Identity                  Text
--------                  ----
ru\Internal\5.7.12        Russian text


Теперь давайте посмотри на отбивку, которая приходила в Exchange 2007/2010:

e2010_dsn

В этом NDR имеется 2 поля с текстом, которые можно изменить:

  1. “Test internal 5.7.12 en” – этот текст берется из кастомизированного системного сообщения
  2. “#550 5.7.12 Reject Text ##” – этот текст берется из параметра RejectMessageReasonText из соответствующего правила


В Exchange 2013 такой же NDR выглядит немного по другому и текст он отображает совсем другой:

e2013_dsn

  1. “Delivery not authorized, message refused” — первое текстовое поле берется из параметра RejectMessageReasonText из соответствующего правила
  2. “550 5.7.12 TRANSPORT.RULES.RejectMessage…” – второе текстовое поле является внутренним и его изменить никак нельзя (оно всегда одно и то же)

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


Workaround:

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

  1. Открываем ADSIEdit, подключаемся к конфигурационному разделу и переходим по следующему пути: “CN=TransportVersioned,CN=Rules,CN=Transport Settings,CN=E13Lab,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=E13,DC=Lab”
  2. Находим нужное транспортное правило и открываем его свойства
  3. Находим атрибут “msExchTransportRuleXml” и открываем его для изменения

adsiedit


Значение этого атрибута – это параметры нашего правила в формате XML.

xml

Все, что нужно сделать – это стереть стандартный текст “Delivery not authorized, message refused” в третьем значение “argument value”. В итоге, у вас должна получиться следующая XML:

xml_2

После этого, Exchange 2013 начнет использовать кастомизированные системные сообщения для заданного в правиле enhanced status code.

ndr

Для возвращения возможности редактировать это правило, достаточно вписать в “argument value”, из которого мы удалил текст, любую фразу. Правило опять перестанет работать, но мы сможем отредактировать другие параметры.


PS: После этих изменений правило в EAC будет затемненным и его нельзя будет редактировать:

eac1

Удачи!


Читайте также:

Добавить комментарий