概要
みなさんこんにちは。フルスタックエンジニアの高瀬 @takasehiromichi です。
最近、バウンスメールの対応を行なっていたのですが、バウンスメールにはSMTPステータスコードが記載されています。
このコードを元に、バウンスの原因が日本語でわかるようにプログラムを作成したので、記事にしようと思います。
なお、ソースコードについては、記事末尾に記載します。
Simple Mail Transfer Protocol (SMTP) Enhanced Status Codes Registry
まず、SMTPステータスコードの仕様を確認します。
SMTPステータスコードは、X.Y.Zの形式で記述され、Class Sub-Codes、Subject Sub-Codes、Enumerated Status Codesの仕様としてまとめられています。
Xに当たるClass Sub-Codesは、2が成功、4が永続的で一時的な障害、5が恒久的な失敗です。
Yに当たるSubject Sub-Codesは、後述のEnumerated Status Codesで網羅できるため、特に解説しません。
Y, Zに当たるEnumerated Status Codesは、YとZの値を確認することで、詳細な説明を導出することができます。
例えば、よくあるメールボックスがいっぱいでメールが受信できないケースは、X.2.2 で送信され、これはY=2、Z=2なので、X.2.2、Mailbox fullが該当し、説明としては「The mailbox is full because the user has exceeded a per-mailbox administrative quota or physical capacity. The general semantics implies that the recipient can delete messages to make more space available. This code should be used as a persistent transient failure.」となります。
これを日本語にすると、「ユーザーがメールボックスごとの管理クォータまたは物理容量を超えたため、メールボックスがいっぱいです。 一般的なセマンティクスは、受信者がメッセージを削除して使用可能なスペースを増やすことができることを意味します。 このコードは、永続的な一時的な障害として使用する必要があります。」となり、これをわかりやすい表現にすると、「ユーザーがメールボックスごとの管理クォータまたは物理容量を超えたため、メールボックスがいっぱいです。」となります。
これら一つ一つのルールごとに全てわかりやすい日本語にしたのが、後述のプログラムです。
また、今後これらのルールに変更や追加があってもメンテナンスしやすいように、全てのルールにはコメントを記載しています。どのルールか、X.Y.Zのどれに該当するか、どんなタイトルか、どんな日本語訳原文かを記載し、returnでわかりやすい日本語を返しています。
また、switchではなく、あえてif-elseで記述することで、複数行コメントを入れても視覚的に問題が出ないようにしてあります。
まとめ
こういったプログラムは、後々効いてくるタイプが多いです。工数がかかってそうに見えても、後から回収できることが多いので、積極的に取り掛かっていきたいです。