2009年07月09日

RFC違反のメールアドレス

最近、こいつに悩まされていた。

そもそも、メールアドレスに使用できる文字列は基本的にRFC2822で規定されている。

http://srgia.com/docs/rfc2822j.html

具体的には、

・大文字小文字のアルファベット

・数字

・! (エクスクラメーション)
・# (シャープ)
・$ (ダラー)
・% (パーセント)
・& (アンパサンド)
・' (シングルクォーテーション)
・* (アステリスク)
・+ (プラス)
・- (ハイフン、マイナス)
・/ (スラッシュ)
・= (イコール)
・? (クエスチョン)
・^ (キャロット、ハットマーク)
・` (バッククオート)
・{ } (中括弧開く閉じる)
・| (パイプライン)
・~ (チルダ)
・. (ドット、ピリオド)
・_ (アンダースコア、アンダーバー)

上記以外の文字の使用は不可。
"."(ドット)の使用は可能だが、連続しての使用は不可。
また、ローカル部(@の左側)の始めや終わりにも使用不可。

という決まりがある。

最近は、各携帯電話会社も準拠するようになっているが、

少し前まで、一部のプロバイダや、携帯電話会社ではこの仕様に準拠していなかった。

で、困るのが準拠してない時代に、登録されたメールアドレスの取り扱いだ。

困る箇所が2つある。

まずはメールアドレスの登録時。良くあるメールアドレスの形式チェックで、

jakarta commons のvaridatorコンポーネントを使っている場合は、標準ではエラー扱いになる。

仕方ないから、EmailValidatorをオーバーライドして、USER_PATTERNを変更する必要がある。

自分の場合は、以下のように修正した。


private static final String USER_PATTERN = "/^\\s*" + WORD + "(\\.+" + WORD
+ ")*\\.*$/";




次に困るのは、MTA側で送信時にエラーとなること。

他のMTAでは試してないけど、今使ってるJamesは送信エラーになってしまう。

これも仕方ないから改造するしかない。

実際にチェックしている箇所は、apache-mailet-2.X.jar内の

org.apache.mailet.MailAddress#parseUnquotedLocalPart(String address)だ。

このメソッドの最後の部分の


if (lastCharDot) {
   throw new AddressException(・・・)
}

をコメントアウトして、jarを固め直してJamesに反映させる。

これで一応は配信されるようにはなったが、どっかの中継先のMTAでNGとなることは往々にしてあるだろう。

各携帯電話会社も結局準拠するなら、最初からしてりゃいいのに。
# ちなみにauだけはドットの連続はまだOKみたい。

近い将来は、そういう不正アドレスも消えていくんだろう。

やっぱり、標準基準というのは大事だな。

社内の小さなこともやはり標準化を進めて行かねば。


posted by hana at 12:56| Comment(3) | TrackBack(0) | メール関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして!
美紀といいます。
この度ブログを始めたので挨拶で
コメントさせて頂きました。

私のブログは競艇やギャンブルが主になっちゃうと
思いますが日常の事もいろいろ書いていくので
よかったらコメントください☆

http://ameblo.jp/boat-gals/
Posted by みき at 2009年07月10日 18:03
ども、はじめまして。

携帯会社のRFC2822「非」準拠は、インターネットメールを使った迷惑メールへの対策として推奨しているところがあるみたいですね。
少し前の話題でしたので、今はまた状況が変わっているかもしれませんが。

そういう(独りよがりの)「対策」は、他との連携に問題が出ることが多いので、なるべく止めて欲しいものですね(^^;
Posted by キルシェ at 2009年07月15日 15:13
なるほど。携帯会社のRFC2822「非」準拠は、迷惑メール対策の一環だったのですね。

でも、最近は準拠してるしているようなので、
別の対応策が確立できたのでしょうかね〜?

それか「非」準拠のバッシングがすごかったとか??
Posted by hana at 2009年07月17日 09:46
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。