SAKURUG TECHBLOG

RFC違反のアドレスってなんですか。

timestampauthor-name
Haruya

はじめに

現在運用しているサイトが、RFC違反アドレスでも登録できてしまう仕様になっており、バリデーションを設定したいと依頼を受けました。

私自身がRFC違反アドレスという単語を聞いたことがなかったので、対応完了までの経緯をつらつらとまとめてみました。

(フロントのみの対応。)

RFC違反とは

何もわからなかったので、ひとまずchatGPTに聞いてみました。

メールアドレスに関するRFC違反は、電子メールの送受信において標準規格で定められた形式やルールに従わない場合に発生します。これらの規格は主に、**RFC 5321(SMTP - Simple Mail Transfer Protocol)RFC 5322(Internet Message Format)**で定義されています。これらのRFCに違反するメールアドレスの使用は、メールの配信失敗やスパムフィルターによるブロックなどの問題を引き起こす可能性があります。

スパムメールの大量送信や、不正なドメイン名の登録、無効なIPアドレスの使用などが増えたため、規格を統一しようと決められたルールのようです。

【RFC 5321(SMTP - Simple Mail Transfer Protocol):日本語訳】

【RFC 5322(Internet Message Format):日本語訳】

どのような形式が該当する?

そもそもRFC違反アドレスとはどんなものが該当するのでしょうか?

・半角英数字と一部の記号(! % # $ & * + - / = ? ^ _ { | } ~ .)

例)a'bcd@〇〇〇〇


・アットマーク(@)の前にドット(.)の連続が続くパターン

例)abcd..ef@〇〇〇〇

・先頭にピリオドが付くパターン

例).abcd@〇〇〇〇

・アットマーク(@)の直前がドット(.)であるパターン

例)abcd.@〇〇〇〇

上記のパターンのようなメールアドレスです。

上記のようなメールアドレスは、2009-2010年以前は登録できたようですが、現在は新規取得できなくなっているようです。

RFC違反形式のメールアドレスのパターンは数が多すぎて全てバリデーションで弾くのは不可能だったので、
今回は上記4パターンを正規表現で弾けるようにしました。

使用した正規表現

引用しました:https://tech108.firenium.com/rfc5322_regular_each_language/

/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/

作業自体は、現状設定している

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]{2,}@[a-zA-Z0-9-]{2,}(?:\.[a-zA-Z0-9-]{2,})*$/

こちらの正規表現を上記バリデーションに書き換えただけになります。

感想

docomo、auなども非推奨にしており、今後使用者も少なくなるであろうRFC違反のメールアドレスですが、

まだまだバリデーションの対象として考慮する必要性がありそうです。

参考

docomo

au

記事をシェアする

ABOUT ME

author-image
Haruya
準備中