package jp.agentec.sinaburocast.enumration;

public class ErrorMailStatus {

	public static enum SmtpErrorType {

		ERR_421(421, "Too many bad command","コマンドがサーバーで指定された回数、失敗しました。(ソケットは強制クローズされます)"),

		ERR_450_1(450, "Mail in the mailbox is full","メールボックスに保存できるメール数を超えています。"),

		ERR_450_2(450, "Mailbox is full","メールボックスに保存できるメール数を超えています。"),

		ERR_450_3(450, "The transmission has been permitted to this user only in the same domain","所属、又は管理ドメインからの送受信が制限されています。"),

		ERR_451_1(451,"database error",
				"xxxxx のアカウントを確認中にファイルが要因のエラーがありました。"),

		ERR_451_2(451,"spool faile, please try again",
				"Spool フォルダに書き込めませんでした。"),

		ERR_451_3(451,"Session Closed",
				"サーバー側でソケットをクローズする必要があったため送信できませんでした。"),

		ERR_451_4(451,"domain doesn't exist",
				"指定されたドメインが存在しませんでした。"),

		ERR_451_5(451,"connection was refused, Connection closed",
				"該当する接続はサーバーによって拒否されました。(一時的な拒否)"),

		ERR_451_6(451,"rejected for policy reasons",
				"該当する接続はサーバーによって拒否されました。(一時的な拒否)"),

		ERR_452_1(452,"Mail system storage is full",
				"本文を受信する際にサーバー上にテンポラリファイルが作成できませんでした。"),

		ERR_452_2(452,"Mail system is full",
				"サーバー上でファイル又はメモリを確保することができませんでした。"),

		ERR_452_3(452,"Mail cannot be received by the system error",
				"サーバーがインストールされているドライブのHDDの残り容量が指定容量以下です。"),

		ERR_452_4(452,"Too many recipients",
				"サーバーで指定された宛先の最大数を超えて宛先を指定されました。"),

		ERR_452_5(452,"Too many recipients in today",
				"1日に送信できるメール数を超えました"),

		ERR_500_1(500,"not exists alias or domain",
				"メールアドレスでエイリアス又はドメインが指定されていません。"),

		ERR_500_2(500,"Syntax error",
				"文法ミス、又は解析できないコマンドが送信されました。"),

		ERR_500_3(500,"The length of the command is too long",
				"1行のコマンドの長さが改行を含む 1024bytes を超えています。"),

		ERR_500_4(500,"Command unrecognized",
				"文法ミス、又はサポートされていないコマンドが送信されました。"),

		ERR_501_5(501,"HELO requires domain address",
				"HELO コマンドでドメイン名又はホスト名が省略されています。"),

		ERR_501_6(501,"EHLO requires domain address",
				"EHLO コマンドでドメイン名又はホスト名が省略されています。"),

		ERR_502(502,"Mailing list is not supported.(Product only)",
				"フリー版でメーリングリストを設定し、メーリングリストを利用しようとしました。(内蔵メーリングリスト機能は製品版のみの機能です)"),

		ERR_503_1(503,"Polite people say HELO first",
				"HELO/EHLO コマンドを送信せずに MAIL FROM コマンドを送信しました"),

		ERR_503_2(503,"Need MAIL before RCPT",
				"MAIL FROM コマンドを送信する前に RCPT TO コマンドを送信しました(送信者を指定せずに宛先を指定した場合)"),

		ERR_503_3(503,"Need SMTP authentication first",
				"SMTP認証が設定されている場合に、SMTP認証を行わずに コマンドを送信しました。"),

		ERR_503_4(503,"Need POP3 authentication first",
				"POP Before SMTP 認証が設定されている場合に、サーバーで指定された時間内に POP3 認証を行っていません。"),

		ERR_503_5(503,"Sender already specified",
				"複数回 MAIL FROM コマンドを送信しました。"),

		ERR_503_6(503,"Duplicate HELO and EHLO",
				"HELO/EHLO コマンドが2回以上送信されました。"),

		ERR_503_7(503,"Need MAIL command(sender)",
				"送信者を指定せずに本文の送信を行おうとしました。"),

		ERR_503_8(503,"Need RCPT command(recipient)",
				"宛先を指定せずに本文の送信を行おうとしました。"),

		ERR_511_1(511,"recipient address has invalid format",
				"送信者メールアドレスのフォーマット(形式)が間違っている。"),

		ERR_511_2(511,"can't find a valid MX for sender domain",
				"そのドメインにはMX(メール用のサーバー)が存在していません。"),

		ERR_522(522,"recipient mailbox is full",
				"メールボックスの容量が一杯で受け取れませんでした。"),

		ERR_535_1(535,"authentication(PLAIN) failed",
				"PLAINを使ったSMTP認証で認証に失敗しました。"),

		ERR_535_2(535,"authentication(LOGIN) failed",
				"LOGINを使ったSMTP認証で認証に失敗しました。"),

		ERR_535_3(535,"authentication(CRAMMD5) failed",
				"CRAM-MD5を使ったSMTP認証で認証に失敗しました。"),

		ERR_550_1(550,"Unknwon local user",
				"xxxxx で指定されたローカルユーザーが存在しません。"),

		ERR_550_2(550,"Not local user. Relay error",
				"xxxxx はローカルユーザーでは無く、中継可能でも無りません。"),

		ERR_550_3(550,"Not local user, server is not relaid. Recipient error",
				"送信者がローカルユーザーでは無く、中継も許可されていないアドレスが外部へ送信を行おうとしました。(主に不正中継)"),

		ERR_550_4(550,"Not local user. Recipient error",
				"送信者のドメインは管理ドメインに含まれるが、ユーザーとして存在しません。"),

		ERR_550_5(550,"Not local user. It's not possible to send it to the outside",
				"外部への送信が禁止されています。"),

		ERR_550_6(550,"rejected for policy reasons",
				"HELO/EHLO で指定されたドメイン名又はホスト名がサーバーの設定で禁止されています。"),

		ERR_550_7(550,"Can't find your SMTP Server. mail is not accepted",
				"逆引きチェックを行い、確認が出来ませんでした"),

		ERR_550_8(550,"connection was refused, Connection closed",
				"該当する接続はサーバーによって拒否されました。(永続的な拒否)"),

		ERR_551_1(551,"no mailbox here by that name",
				"そのようなメールアドレスは存在していません。"),

		ERR_552_1(552,"Database error. please try again",
				"自動登録アカウントで登録に失敗しました。"),

		ERR_552_2(552,"message size exceeds received limit",
				"メールのサイズが該当するアカウントで受信できるサイズ(又はサーバーで指定されたサイズ)以上でした。"),

		ERR_553_1(553,"address is invalid",
				"POP3 専用アカウントで送信を行おうとしました。"),

		ERR_553_2(553,"No such user here",
				"xxxxx で指定されたユーザーは存在しませんでした。"),

		ERR_553_3(553,"No such user and domain here",
				"サーバーで禁止されている宛先に送信しようとしました。(キャンセルRCPTリスト)"),

		ERR_554_1(554,"Size over. Message not accepted",
				"送信しようとしたメールのサイズがサーバーで指定されているサイズ以上でした。"),

		ERR_554_2(554,"Routing loop detected",
				"PMail Server がメールの永久ループを感知しました。"),

		ERR_554_3(554,"Mail was rejected with the SMTP filter",
						"受信したメールはサーバー上のフィルタによって破棄されています。"),

		ERR_554_4(554,"Mail was not receive to mailinglist",
				"メーリングリストで問題(エラー又は予約数を超えた場合)が発生しました。(メーリングリストは該当するメールを受け取っていません)"),

		ERR_554_5(554,"Breach of Sender Policy Framework",
				"SPF での判定が FAIL になりました。"),

		ERR_554_6(554,"Breach of Local Sender Policy",
				"ローカル送信者確認(LSP) で拒否されました。"),

		ERR_554_7(554,"Your email is considered spam",
				"メールの内容がスパムメールであると判断されました。"),

		ERR_999(999,"","エラー内容不明");

		/**
		 * エラーコード。
		 */
		private Integer code;

		/**
		 * 検索文字列。
		 */
		private String searchString;

		/**
		 * エラーメッセージ。
		 */
		private String message;

		/**
		 * コンストラクタ。
		 *
		 */
		private SmtpErrorType(Integer code, String searchString, String message) {
			this.code = code;
			this.searchString = searchString;
			this.message = message;
		}

		public Integer getCode() {
			return this.code;
		}

		public String getSearchString() {
			return this.searchString;
		}

		public String getMessage() {
			return this.message;
		}

		/**
         * メール本文から該当するEnumを検索しリターンする<br>
         * @param searchString コード
         * @return Enum
         */
        public static SmtpErrorType toEnum(String content) {
            for (SmtpErrorType type : SmtpErrorType.values()) {
    			if (content.indexOf(type.getSearchString()) > -1){
                    return type;
                }
            }
            return ERR_999;
        }

	}

	public static enum SmtpStatusType {

		Status_410("4.1.0","その他のアドレスの状態"),
		Status_411("4.1.1","送信先メールボックス アドレスが正しくない"),
		Status_412("4.1.2","送信先システム アドレスが正しくない"),
		Status_413("4.1.3","送信先メールボックス アドレスの構文が正しくない"),
		Status_414("4.1.4","送信先メールボックス アドレスがあいまい"),
		Status_415("4.1.5","送信先メールボックス アドレスが有効"),
		Status_416("4.1.6","メールボックスが移動されている"),
		Status_417("4.1.7","送信者のメールボックス アドレスの構文が正しくない"),
		Status_418("4.1.8","送信者のシステム アドレスが正しくない"),
		Status_420("4.2.0","その他または未定義のメールボックス状態"),
		Status_421("4.2.1","メールボックスが無効で、メッセージを受け付けない"),
		Status_422("4.2.2","メールボックスがいっぱい"),
		Status_423("4.2.3","メッセージの長さが管理制限を超えている"),
		Status_424("4.2.4","メーリング リスト展開の問題"),
		Status_430("4.3.0","その他または未定義のメール システム状態"),
		Status_431("4.3.1","メール システムがいっぱい"),
		Status_432("4.3.2","システムがネットワーク メッセージを受け付けない"),
		Status_433("4.3.3","システムが選択した機能を利用できない"),
		Status_434("4.3.4","システムに対してメッセージが大きすぎる"),
		Status_440("4.4.0","その他または未定義のネットワークやルーティング状態"),
		Status_441("4.4.1","ホストから応答がない"),
		Status_442("4.4.2","接続が正しくない"),
		Status_443("4.4.3","ルーティング サーバー エラー"),
		Status_444("4.4.4","ルーティングできない"),
		Status_445("4.4.5","ネットワークの混雑"),
		Status_446("4.4.6","ルーティングのループを検出"),
		Status_447("4.4.7","配信の期限切れ"),
		Status_450("4.5.0","その他または未定義のプロトコル状態"),
		Status_451("4.5.1","無効なコマンド"),
		Status_452("4.5.2","構文エラー"),
		Status_453("4.5.3","受信者が多すぎる"),
		Status_454("4.5.4","コマンドの引数が無効"),
		Status_455("4.5.5","プロトコル バージョンが正しくない"),
		Status_460("4.6.0","その他または未定義のメディア エラー"),
		Status_461("4.6.1","メディアがサポートされていない"),
		Status_462("4.6.2","要求された変換が禁止されている"),
		Status_463("4.6.3","要求された変換がサポートされていない"),
		Status_464("4.6.4","変換が実行されなかった"),
		Status_465("4.6.5","変換エラー"),
		Status_470("4.7.0","その他または未定義のセキュリティ状態"),
		Status_471("4.7.1","配信が認証されないために、メッセージが拒否される"),
		Status_472("4.7.2","メーリング リストの展開が禁止されている"),
		Status_473("4.7.3","要求されたセキュリティ変換が禁止されている"),
		Status_474("4.7.4","セキュリティ機能がサポートされていない"),
		Status_475("4.7.5","暗号化エラー"),
		Status_476("4.7.6","暗号化アルゴリズムがサポートされていない"),
		Status_477("4.7.7","メッセージの整合性エラー"),
		Status_510("5.1.0","その他のアドレスの状態"),
		Status_511_1("5.1.1","送信者メールアドレスのフォーマット(形式)が間違っている。"),
		Status_511_2("5.1.1","送信者メールアドレスに使ってはいけない文字が含まれています。"),
		Status_511_3("5.1.1","そのドメインにはMX(メール用のサーバー)が存在していません。"),
		Status_512("5.1.2","送信先システム アドレスが正しくない"),
		Status_513("5.1.3","送信先メールボックス アドレスの構文が正しくない"),
		Status_514("5.1.4","送信先メールボックス アドレスがあいまい"),
		Status_515("5.1.5","送信先メールボックス アドレスが有効"),
		Status_516("5.1.6","メールボックスが移動されている"),
		Status_517("5.1.7","送信者のメールボックス アドレスの構文が正しくない"),
		Status_518("5.1.8","送信者のシステム アドレスが正しくない"),
		Status_520("5.2.0","その他または未定義のメールボックス状態"),
		Status_521("5.2.1","メールボックスが無効で、メッセージを受け付けない"),
		Status_522("5.2.2","メールボックスの容量が一杯で受け取れませんでした。"),
		Status_523("5.2.3","メッセージの長さが管理制限を超えている"),
		Status_524("5.2.4","メーリング リスト展開の問題"),
		Status_530("5.3.0","その他または未定義のメール システム状態"),
		Status_531("5.3.1","メール システムがいっぱい"),
		Status_532("5.3.2","システムがネットワーク メッセージを受け付けない"),
		Status_533("5.3.3","システムが選択した機能を利用できない"),
		Status_534("5.3.4","システムに対してメッセージが大きすぎる"),
		Status_540("5.4.0","その他または未定義のネットワークやルーティング状態"),
		Status_541("5.4.1","ホストから応答がない"),
		Status_542("5.4.2","接続が正しくない"),
		Status_543("5.4.3","ルーティング サーバー エラー"),
		Status_544("5.4.4","ルーティングできない"),
		Status_545("5.4.5","ネットワークの混雑"),
		Status_546("5.4.6","ルーティングのループを検出"),
		Status_547("5.4.7","配信の期限切れ"),
		Status_550("5.5.0","その他または未定義のプロトコル状態"),
		Status_551("5.5.1","そのようなメールアドレスは存在していません。"),
		Status_552("5.5.2","構文エラー"),
		Status_553("5.5.3","受信者が多すぎる"),
		Status_554("5.5.4","メールの内容がスパムメールであると判断されました。"),
		Status_555("5.5.5","プロトコル バージョンが正しくない"),
		Status_560("5.6.0","その他または未定義のメディア エラー"),
		Status_561("5.6.1","メディアがサポートされていない"),
		Status_562("5.6.2","要求された変換が禁止されている"),
		Status_563("5.6.3","要求された変換がサポートされていない"),
		Status_564("5.6.4","変換が実行されなかった"),
		Status_565("5.6.5","変換エラー"),
		Status_570("5.7.0","その他または未定義のセキュリティ状態"),
		Status_571("5.7.1","配信が認証されないために、メッセージが拒否される"),
		Status_572("5.7.2","メーリング リストの展開が禁止されている"),
		Status_573("5.7.3","要求されたセキュリティ変換が禁止されている"),
		Status_574("5.7.4","セキュリティ機能がサポートされていない"),
		Status_575("5.7.5","暗号化エラー"),
		Status_576("5.7.6","暗号化アルゴリズムがサポートされていない"),
		Status_577("5.7.7","メッセージの整合性エラー"),
		Status_999("9.9.9","ステータス不明");

		/**
		 * エラーコード。
		 */
		private String code;

		/**
		 * エラーメッセージ。
		 */
		private String message;

		/**
		 * コンストラクタ。
		 *
		 */
		private SmtpStatusType(String code, String message) {
			this.code = code;
			this.message = message;
		}

		public String getCode() {
			return this.code;
		}

		public String getMessage() {
			return this.message;
		}

		/**
         * メールヘッダStatusから該当するEnumを検索しリターンする<br>
         * @param searchString コード
         * @return Enum
         */
        public static SmtpStatusType toEnum(String code) {
            for (SmtpStatusType type : SmtpStatusType.values()) {
                if (type.getCode().equals(code)) {
                    return type;
                }
            }
            return Status_999;
        }

	}

}