Exchange 2007 / 2010 と Exchange 2013 の混在環境で NDR を返すトランスポート ルールを構成する際の注意点
今回は Exchange 2007 / 2010 と Exchange 2013 の混在環境で NDR (バウンス メッセージ) を返すトランスポート ルールを構成する際の注意点についてご紹介いたします。本内容に該当している場合、Exchange 2007 / 2010 側で該当ルールを処理して NDR を返す際に Microsoft Exchange Transport サービスが不正終了する現象が発生してしまいます。
現象について
Exchange 2007 / 2010 では NDR を返すトランスポート ルールを構成する際に応答メッセージ (RejectMessageReasonText) に指定可能な文字列は US-ASCII のみであり、Exchange 管理コンソールや Exchange 管理シェルから応答メッセージ (RejectMessageReasonText) に日本語などを指定しようとするとエラーが発生して設定自体が出来ないように制御されていました。一方で Exchange 2013 では後述の「参考」で記載するように動作が変更されていることもあり、応答メッセージ (RejectMessageReasonText) に日本語などの文字列も指定出来るようになっています。
なお、トランスポート ルールの設定内容は Active Directory 上で保持して Exchange 組織内で共通で管理されており、Exchange 2007 / 2010 / 2013 はいずれも Active Directory からトランスポート ルールの設定を読み込んで処理しています。このため、Exchange 2007 / 2010 と Exchange 2013 の混在環境で Exchange 2013 から応答メッセージ (RejectMessageReasonText) に日本語などを使用したトランスポート ルールを構成した場合、該当ルールを Exchange 2007 / 2010 が処理すると意図されていないデータであると判断して内部エラーが発生し、イベント ログに以下のエラーが記録されて Microsoft Exchange Transport サービスが不正終了します。
ログの名前 : Application
ソース : MSExchangeTransport
イベント ID : 10003
タスクのカテゴリ: PoisonMessage
レベル : エラー
説明:
次のコール スタックでメッセージを処理しているときに、トランスポート プロセスに失敗しました。System.FormatException: 応答用のテキストに含めることができるのは、US-ASCII 文字だけです。
場所 Microsoft.Exchange.Data.Transport.Smtp.SmtpResponse..ctor(String statusCode, String enhancedStatusCode, String[] statusText)
場所 Microsoft.Exchange.MessagingPolicies.Rules.RejectMessage.Reject(TransportRulesEvaluationContext context, String status, String enhancedStatus, String reason)
場所 Microsoft.Exchange.MessagingPolicies.Rules.RulesEvaluator.ExecuteActions()
場所 Microsoft.Exchange.MessagingPolicies.Rules.RulesEvaluator.Run()
場所 Microsoft.Exchange.MessagingPolicies.Rules.TransportRuleCollection.Run(TransportRulesEvaluationContext context)
場所 Microsoft.Exchange.MessagingPolicies.TransportRuleAgent.TransportRuleAgent.OnRoutedMessageHandler(RoutedMessageEventSource source, QueuedMessageEventArgs args)
場所 Microsoft.Exchange.Data.Transport.Routing.RoutingAgent.Invoke(String eventTopic, Object source, Object e)
場所 Microsoft.Exchange.Data.Transport.Internal.MExRuntime.Dispatcher.Invoke(MExSession session)
場所 Microsoft.Exchange.Data.Transport.Internal.MExRuntime.MExSession.AsyncInvoke(Object state)
場所 Microsoft.Exchange.Data.Transport.Internal.MExRuntime.MExSession.BeginInvoke(String topic, Object source, Object e, AsyncCallback callback, Object callbackState)
場所 Microsoft.Exchange.Transport.Categorizer.MExEvents.RaiseEvent(MExSession mexSession, String eventTopic, AsyncCallback callback, Object state, Object[] contexts)
場所 Microsoft.Exchange.Transport.Categorizer.MExEvents.RaiseOnRoutedMessage(TaskContext context, AsyncCallback callback, MailItem mailItem)
場所 Microsoft.Exchange.Transport.Categorizer.CategorizerComponent.Stage5OnRoutedMessage(TransportMailItem transportMailItem, TaskContext taskContext)
場所 Microsoft.Exchange.Transport.Categorizer.
Exchange 2007 / 2010 と Exchange 2013 の混在環境で NDR を返すトランスポート ルールを構成する際には Exchange 2013 から設定する場合でも応答メッセージ (RejectMessageReasonText) は US-ASCII のみの文字列にしていただけますようお願いいたします。
参考 (Exchange 2013 での動作変更)
以下の TechNet に記載されている通り、Exchange Server が生成する NDR の本文は "ユーザー情報セクション" と "管理者向けの診断情報セクション" で構成されています。"管理者向けの診断情報セクション" の SMTP 応答部分は US-ASCII のみ使用することができますが、"ユーザー情報セクション" のテキストでは日本語など US-ASCII 以外の文字も使用することができます。
Title: DSN と NDR
URL: https://technet.microsoft.com/ja-jp/library/bb232118(v=exchg.150).aspx
例えば、以下のようなトランスポート ルールを構成した上で New-SystemMessage でカスタム DSN メッセージも登録してテキスト内容をカスタマイズしていることを考えます。
・トランスポート ルール
Description : 次の操作を行います:メッセージを拒否して、説明 'Reject by TransportRule' を含める。状態コード: '5.7.10'RejectMessageEnhancedStatusCode : 5.7.10RejectMessageReasonText : Reject by TransportRule. |
・カスタム DSN メッセージ
Text : トランスポート ルールにより拒否されました。Internal : TrueJanguage : jaDsnCode : 5.7.10 |
Exchagne 2007 / 2010 ではトランスポート ルールの RejectMessageReasonText で指定した文字列は拡張状態コードと共に "管理者向けの診断情報セクション" の SMTP 応答部分に記載されていました。
ただし、Exchange 2013 では RejectMessageReasonText で指定した文字列は "ユーザー情報セクション" のテキストに記載されるように動作が変更されており、これにより Exchange 2013 では RejectMessageReasonText に日本語などの文字列も指定できるようになっています。
なお、Exchange 2013 CU6 以前ではトランスポート ルールで NDR を返した場合にカスタム DSN メッセージで登録したテキスト内容が表示されない不具合がござました。本不具合は Exchange 2013 CU7 で修正されておりますので、Exchange 2013 でカスタム DSN メッセージを登録する場合にはご注意ください。
Title: RejectMessageReasonText in transport rule appears in the user section of a DSN in Exchange Server 2013
URL: https://support.microsoft.com/kb/3003986/en-us
・Exchange 2013 CU6 以前の環境でトランスポート ルールにより生成された NDR