docomo.ne.jp の MTA

いつの間にかdocomoのMTAサーバがまともになっていた。
既にworkaroundを入れてしまっていたので、いつ頃直ったのかは不明。

今までの問題だった点は以下

  • ESMTPに対応していない(SIZE使用不可、データ転送するまで制限が確認出来ない)
  • SMTPプロトコル的に正しくない(DATAセッションで非同期にエラーを返す)

後者は確認してないけど、前者が直ったためMAIL FROMの時点でサイズ超過
を認識出来るようになった。今までは、サイズの大きいメールを送ると、
DATAセッションで非同期に 554 Transaction failed を送りつけて
強制切断していた。


DATAセッションでクライアントから . を受け取る前にサーバからレスポンスを返すのは
SMTPの仕様的に正しく無い。そのため、普通のMTAはSMTPの仕様に則りリトライし
送信>切断>Queueに落ちる>再送>切断>略 な無限ループに陥っていた。
MTAの設定でQueueの滞留時間超過でバウンスするまでこのままなので、
かなり無駄なトラフィックになっていた。


sendmail の場合は _FFR_CATCH_BROKEN_MTAS 等を定義するとこの様な挙動の
場合エラーとして扱うことが可能。これを仕込めば滞留しなくはなるけど
国内の大手がこんな腐れ実装を垂れ流してるのには正直ゲンナリしていた。


docomoとしては他にも色々感じ悪い思い出が山ほどあるけど、今回の様に
正しく修正されたのは喜ぶべき事なので記録。


以下は今と昔の差分

 < 220 docomo.ne.jp SMTP Service Ready
 > EHLO hoge.example.com
 < 500 Syntax error,command unrecognized
 > HELO hoge.example.com
 < 250 Requested mail action okay, completed
 > MAIL FROM:
 < 250 Requested mail action okay, completed
 > MAIL FROM:
 < 250 Requested mail action okay, completed
 > DATA
 < 354 Start mail input; end with .
 データ転送開始後、一定サイズで強制切断される。

現在

 < 220 docomo.ne.jp ESMTP Service Ready
 > EHLO hoge.example.com
 < 250-docomo.ne.jp
 < 250 SIZE 5242880
 > MAIL FROM: SIZE=10000000
 < 552 Message size exceeds maximum value
 この時点でバウンスする