メールアドレスが正しいか確認する方法

結論から言うと、Webページ上のフォームやあるいは紙の上に記入されたメールアドレスが正しいかどうかを 機械的に正確に確認するには、 そのメールアドレスにメールを一本送って実際それが届くかどうかをもって確認する以外に方法はない。 単純な事実なのだが、これをあえて無視するかのように、さまざまなチェック方法を模索し、 結局不完全に終わり無駄なコストをかけてしまっているWebサイトは少なくない。

過去の記事「メールアドレスを間違える確率(2003/12)」 でも書いたように、Web上のフォームにメールアドレスを入力する際に間違える確率は意外に高い。 ECサイトや製品サポートサイトなどではこれの対処に意外と手間を取らされているだろう。

しかし、よく採用されている/採用しようとされる以下の方法はいずれもおすすめできない

2つのメールアドレスの入力欄をつくって2回入力させる方法 (ベリファイチェック方式)

一つ目の入力内容をコピーアンドペーストで 二つ目の入力欄に入れてしまうユーザーは意外と多いので無意味。 そもそも自分のメールアドレスを間違って覚えている人も、 これまた不思議なくらい多い。自分の携帯電話の番号をはっきり覚えていない (携帯を見ないとわからない)のと似たようなものなのだろうか。 そういう人は何度入力させたところで当然間違う。 そもそも、入力欄が無駄に増える=入力する気が失せる、の法則で、 ろくなことにならない。

プログラミング技術的な手法

perl言語などでは、以下のようなモジュールがある。
search.cpan.org: Mail::CheckUser - check email addresses for validity
このperlモジュールはメールアドレスとしては無いはずの文字が含まれていないか チェックしたり、ドメイン部分(@の右側)でDNSのMXレコードを 検索してちゃんと存在するドメインかどうかチェックしたり、 相手のメールサーバーに接続してそのユーザーが存在するかどうか 事前に問い合わせてくれる、というものだ。

あるいはこんなものすごい正規表現プログラミング手法もある。
メールアドレスの正規表現
ここまでくるともはやわけがわからない。 少なくとも筆者はこれを使う気にはなれない。(笑)

いずれにせよ、こうした技術的なアプローチも不完全だ。
  • 例えば筆者のメールアドレスが watanabe@example.com だったとして、これを書き間違えて wwatanabe@example.com(wが一個多い)と書いてしまったとしよう。 (メールを実際に送ってみる以外の方法で)自動的にこの間違いを見つけだすことは、 どのような技術を持ってしても不可能だ。
  • DNS検索は、ネットワーク遅延で時間がかかったりDNSサーバの混雑や不具合によって うまく検索できないケースが、しょっちゅうではないが日常的にある。 (普通のメールサーバはそういうときには少し時間を置いてから改めて検索を試みる、 ということを勝手にやってくれるので一般には気づかない)
  • 相手のメールサーバに直接接続し、SMTPのVRFYコマンドや RCPTコマンドで問い合わせることでメールアドレスの真偽を調べることはできる。 しかし、昨今では、SPAM対策やプライバシー保護の観点から VRFYコマンドにまともに応答するメールサーバーはまれである。 RCPTコマンドに対しても、コマンド受付時点ではどんなメールアドレスであっても 受け入れてしまう場合があり、それではメールアドレスの正確性チェックの意味を成さない。

以上にあげた方法論は、方法論自体に欠陥や不足がありすぎるので、 それを実際にWebシステム上に実装することは無駄なコストと言わざるを得ない。 気休めという意味では無駄ではないかもしれないが。

だからこそ、最近では 「実際にメールを一本送って、それが届くようならそのメールアドレスは正しいはずだ」 という、単純だが一番確実な方法論を用いているWebシステムが多い。 Yahoo!の各種のサービスにおける「メールの認証」というものがそうだ。 freemlなどの メーリングリストサービスでも、

メールアドレスの入力→いきなり登録
ではなく、
メールアドレスの入力→確認メールの送信 →確認メールに書かれたURLにアクセス→登録完了
というフローになっている。 freemlはこれを「本人以外の人物によるML参加登録を防ぐために」やっていると説明しているが、 実は入力されたメールアドレスが本当に正しいものかを確認する意味もあってのことなのだ。

ただし、ECサイトなどにおいてこのようなワンクッション置く方式を採用するのは難しいのかもしれない。 現にアマゾン などはメールアドレス入力→いきなり登録、というフローになっている。 確認メールを受け取らないと注文手続きを続けられないようでは使い勝手の面で難があるからだ。

データベースに蓄積されるメールアドレスの正確性を採るのなら ユーザーサポートの手間を省けるがユーザーの手間は少し増える。 メールアドレスの正確性を捨てるならユーザーの手間は減りWebサイトの使い勝手は向上するが メールアドレスが間違っているケースに対処するためのサポートの手間が増える。 ジレンマだ。

アマゾンのような「いきなり登録式」の場合、 いざそのメールアドレスにメールを送ったときに、 エラーとして返ってきた場合の対処をいかに自動化できるかがコスト低減のカギになる(とは言ってもやれることは限られるが)。 長くなったのでそのへんの話はまたの機会に。

トラックバックURL

このエントリーのトラックバックURL:
http://www.ywcafe.net/mt/mt-tb.cgi/395

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


画像の中に見える文字を入力してください。