.NETでのメール送信とRFCに準拠してないメールアドレスにはまるの巻

やられました...
以前書いたメールの文字化けテストでメール送信は大丈夫かなと思ってましたが甘かったです。

以前の記事
http://d.hatena.ne.jp/takakuro/20060816


何が問題だったかというと、世間にはメールアドレスの"@"より前の部分に"."が連続していたり、@の直前に"."が存在したりするアドレスがあるようでして。例えば下みたいな感じで。

hoge....hoge@doxxxx.ne.jp
hogehoge.@doxxxx.ne.jp

上記アドレスはRFC2821の定義に違反していて本来ならインターネットのメールアドレスとしては使っちゃあかんのです。ですが、DOCOMOではメールアドレスとして使えちゃうみたいですね。(AUでも使えるらしい?です)下記リンク参照。

元ネタ
http://neta.ywcafe.net/000435.html


.NETだとMailMessageクラスの送信先アドレスとして、上記のようなRFC非準拠のアドレスを設定した時点で、FormatExceptionが発生してしまいます。SmtpClientクラスでそんなアドレスを使っても同様の動き。しょうがないのでSystem.Net.Socketsのライブラリを利用してSMTPの通信を自分でゴリゴリと記述してみたけど、今度は「501 5.5.4 Invalid Address」というエラーメッセージでSMTPサービスにはじかれる。これはWindows付属のSMTP自体がRFC非準拠のアドレスをはじくみたいですね(↓)

KB281538 : @ の直前にピリオドがあるなどの RFC に準拠していないアドレスを含むメッセージを送受信できない
http://support.microsoft.com/?scid=kb;ja;281538


当然の動きだよな、こりゃ。
上記みたいな例が1万人に1人ぐらいなら別に気にしないんだけど、500件に15件ぐらいの割合とけっこういるんですよ、これがまた。


というわけで結論.
■ 携帯メールへメール送信する必要があり、"."の連続や@の前に"."が存在するメールアドレスだろうとメールを送らなきゃいけない場合
-> Windows付属のSMTPサービスはおろかSystem.Net.Mailも使わずにSystem.Net.Socketsを使ってゴリゴリと...(略)
RFCに準拠しないアドレスは気にしなくても良い場合
-> Windows付属のSMTPサービスもSystem.Net.Mailを使ってもOK!!


ってとこでしょうか。RFC非準拠のアドレスでもはじかないSMTPサービス探さなきゃ。(すごい矛盾)
リサーチ不足だったなぁ...反省...orz