【PHP】メルアドバリデーションにcheckdnsrr()を使っていたら存在するメルアドもバリデーションに引っかかってしまった話
タイトル通りメールアドレスのバリデーションにcheckdnsrr()でそのホスト名が存在するのかをバリデーションでかけていたのですが、どうやら本当に存在するのにcheckdnsrr()がfalseを返す場合があるとユーザーから苦情が来た。
ちなみにバリデーションはこんな感じでした。
$exploded_address = explode('@', $mailaddress); // 中略 return checkdnsrr($exploded_address[1]);
で、よくよく調べるとcheckdnsrr()には第二引数が指定できるっぽくて、指定が無い場合MXという「ドメインのメール・サーバ名」を意味する値になってるんですが、これを"A"という「ホストのIPアドレス」をチェックするモードにすれば一応対応できるとのこと。
以下、先輩の見解
MXやめて、Aでチェックしちゃうのがいいかもなぁ。 RFC的には、 「MX レコードは見つからなかったが A RR は見つかった場合、その A RR は、優先順位 0 でそのホストを指す暗黙の MX RR に対応する A RR であるかのように扱われる。」 ってなっているので、代替はAで見ちゃうみたいなので。 むしろ checkdnsrrが改善されるべきな気がするwww デフォルトがMXってことはメール用に考えられてるもんだと思うのでw 日本のメールアドレスRFC準拠してないの結構あるし、MXの無いメルアドも存在するんでしょうね。 最近のトレンドは、そもそもメールアドレスの妥当性チェックはせずに(@の前後に文字列あるかぐらい)、アクティベーションとかで誤摩化すっぽいですね(´・ω・`)
ということらしいです( ´_ゝ`)