with the flow

WEBプログラマを目指すWEBデザイナーが書き綴る開発日誌のようなもの

RFC非準拠(@前にドット、ダブルドットがある)のアドレスにメールが送れない問題を解決する(PHPのSendmail編)

PHPSendmail関数でメール送信しているWEBアプリで、
稀に送信自体がされないという現象が起こっていた為、原因を探っていたら分かったことです。。

結論としては、
・メールアドレスの@直前にドットがある
・または@より前のどこかにダブルドットがある
場合は、メールアドレスの形式としてSendmailの処理が認識せず、内部で送信処理前に弾かれていたことが原因。

abc.@example.com(“.”をローカル部の末尾に使用している)
abc..123@example.com(“.”が連続している)

何故認識しないかというと、上記はメールアドレスのRFC的には非準拠な、「デタラメ」なアドレス扱いになるから。
(つまり、Sendmailの処理の方が正しい)

ただ、auとdocomoは2009年頃までこの形式のメールアドレスの取得・変更が行えていた経緯があります。
auの場合、携帯だけでなく、一時期はプロバイダ(dion.ne.jp と auone-net.jp)でもこの形式のメールアドレスが取得できていたようです(ここで知りました)。

主に海外からのスパムメール対策に一定の効果があったことから、
自分の周りでも結構上記の形式にしていた友人がいました。

ただ、実害として、メジャーなメールクライアントOutlookやWindows Mailでメールが送られないという事態になっていました。

参考:「メール アドレスの @ の直前にピリオドがあるなど RFC に準拠していない宛先に Outlook からメールを送信すると、配信不能のメールが返され送信できない」
http://support.microsoft.com/kb/940620/ja

今確認した限りでは以下の様な感じでした。

HotmailやOutlook、Windows Mail: 送信自体ができない。
Gmail: 送信は一応出来るようになっているが、アドレスとしては取得できない。
iPhone(OS5): RFC非準拠のアドレスに送信しようとするとアラート(警告だけで送ることは出来る)。

対策としては、Sendmail関数の内部処理自体を変更してしまうという方法を取りました。