Exchange Onlineへのシステムメール送信

プリンターやシステムのアラートメールなど、社内ネットワークからExchange Online上にあるユーザーのメールボックスにメールを送信するにはいくつか方法があります。

その中で一番設定が簡単で利用されるシーンも多いのが、MXレコードの向け先と同じ contoso-com.mail.protection.outlook.com などのアドレスにSMTP(TCP/25)で直接送信をする方式となります。

Office 365 を使って、多機能デバイスやアプリケーションがメールを送信するように設定する方法

このケースにおいて、稀にメールが受信できないという事象が発生することがあり、調査してみるとSMTPで送信をしようとした際に4xx番台のエラーが出て失敗したという物です。

詳細なログを確認してみると、以下の様なエラーコードで失敗しています。

451 4.4.0 Message failed to be made redundant due to A shadow copy was required but failed to be made with an AckStatus of Retry

451 4.4.0 Message failed to be made redundant due to A shadow copy was required but failed to be made with an AckStatus of Fail

451 4.7.0 Temporary server error. Please try again later. PRX5

452 4.3.1 Insufficient system resources (ProcessorTime)

452 4.3.1 Insufficient system resources (TSTE)

452 4.3.1 Insufficient system resources (UsedVersionBuckets[D:\Queue])

これらは、いずれもExchange Onlineの接続したサーバ環境が一時的に高負荷であり、接続が許容されなかった(≒再送して下さい)という物で、サポートなどに調査依頼や再発防止などを依頼しても解決しない問題となります。これは複数ユーザーの利用するパブリッククラウドであるExchange Onlineでは不可避の問題です。

これはあくまで私の感覚的な数字ですが、0.1~0.01%の間(数千通に1度)程度はコンスタントに発生していますが、継続して発生するようなことはなく、殆どが次回の再送で送信完了しております。

ここで、SMTPクライアントとして直接Exchange Onlineに送信しているような物だと、ソフトウェアの作りによっては再送を行う事はせず、一度の送信失敗でそのまま異常終了してしまうケースがあります。

この場合、そのメール自体がロストしてしまうという自体になってしまいます。この為、届かないと困る重要なメールをExchange Onlineに送信する場合は、

  1. きちんとエラーコードを判別して4xx番台の一時的なエラーだった場合は再送する
  2. アプリケーションは、ローカルやネットワーク内のSMTPサービス(PostfixやSendmailなど)に投げ、そちらできちんと再送制御を行った上で送信する

のどちらかの解決策をとることを強く推奨させて頂きます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です