RFC非準拠(@前にドット、ダブルドットがある)のアドレスにメールが送れない問題を解決する(PHPのSendmail編)
PHPのSendmail関数でメール送信している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関数の内部処理自体を変更してしまうという方法を取りました。