- PR -

メールアドレスを完璧にチェックするには

投稿者投稿内容
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2002-04-17 18:36
メールアドレスを完璧にチェックするには

DEMO
をクリックするとソースコードとWeb Form が表示されます。

Web Form に何も入力しないで Send ボタンをクリックするとエラーメッセージが表示されます。

次に、From, To, Subject, Body を入力してから Send ボタンをクリックします。

メールアドレスの ValidationExpression には、Regular Expression を指定していますが、これは次のような意味があります:

メールアドレスに@と.が含まれていて、@マークの前に1文字以上の文字が存在すること、そしてメールアドレスの最後に2-3文字のドメンが存在すること。

RegularExpressionValidator では、メールアドレスの形式をチェックすることはできますが、メールアカウントが存在するかどうかまではチェックできません。


Hexillion
から提供されている HexValidEmail を使用すると、メールアカウントが存在するかまで完全にチェックすることができます。

現在は、COMインタフェースでしか利用できませんが、近日中に.NET版もリリースされるようです。

HexValidEmail でメールアドレスを完全にチェックしても、他人のメールアドレスを入力したときは、検出できません。この問題を解決するには、送信ボタンをクリックしたとき確認用のメールを送付します。この確認メールには、本人かどうかの問い合わせと確定用のリンクを記載しておきます。

これで本人かどうかも含めてメールアドレスを完璧にチェックすることができます。

Tip:
HexValidEmail を使用すると、データベースに格納されているメーリングリストのメールアカウントをチェックして、不当なメールアドレスを削除することができます。

Happy Programming!
Akio Kasai
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-04-17 20:06
引用:

Dr ADO.NETさんの書き込み (2002-04-17 18:36) より:
Hexillionから提供されている HexValidEmail を使用すると、メールアカウントが存在するかまで完全にチェックすることができます。


うーん、そんな処理をしているとDOS攻撃にさらされそうですね...。

引用:

HexValidEmail でメールアドレスを完全にチェックしても、他人のメールアドレスを入力したときは、検出できません。この問題を解決するには、送信ボタンをクリックしたとき確認用のメールを送付します。この確認メールには、本人かどうかの問い合わせと確定用のリンクを記載しておきます。


これをするのなら、アドレスチェック機能は不要な気がしますが。。。正規表現でどう見てもメールアドレスでないのをはじいたら、あとはメールを出してみればいいのでは?

引用:

これで本人かどうかも含めてメールアドレスを完璧にチェックすることができます。


これも良し悪しで、他人のメールアドレスでいろいろ登録しまくって、その人のメールボックスをゴミでいっぱいにするなんてこともできそうですよね。同じアドレスには2回送らないとか、拒否されたアドレスは保管しておいて次の登録がすぐに行われたときには2重の確認を求めるとか?うーん。

もちろん言い出したらきりがないので、「だからメールアドレスチェック機能は不要だ」なんていうつもりはありませんが、安易に利用すると危険な目にあいそうな気もしないでもないです。

ところで、Dr ADO.NETさんは書き込み専門なんですか?いくつか(私も含め)スレにRESが付いているようですが、すべて無視されているのには何か理由があるのでしょうか?
uda
会議室デビュー日: 2001/12/28
投稿数: 13
投稿日時: 2002-04-17 20:32
引用:

Hexillionから提供されている HexValidEmail を使用すると、メールアカウントが存在するかまで完全にチェックすることができます。


これは、たぶんSMTP(RFC821)のVRFYコマンドを使って実現しているとおもうのですが、
個人情報の漏洩とかいう問題で、このコマンドの実行を許可しないサーバが多いのでは?
(すいません、憶測です。私が2,3のサーバに問い合わせてみた程度です。)
現実的には、NSLOOKUPでMXレコードをチェックするまでが現実的かもしれませんね。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2002-04-17 21:38
引用:
これをするのなら、アドレスチェック機能は不要な気がしますが。。。正規表現でどう見てもメールアドレスでないのをはじいたら、あとはメールを出してみればいいのでは?



メールを出して配信不能で返ってきたときに、そのメールアドレスをデータベースから
自動的にクリーンナップするのがポイントです。

実は、MS-Accessのメルマガを発行しているのですが会員数が約5000人います。メルマガ購読希望者に、メールアドレスを入力してもらう Web Form があるのですが、結構配信不能のアドレスを入力する方がいます。配信不能なメールアドレスをデータベースに登録すると、後でクリーンナップするのが大変ですから可能なかぎりエラーチェックしてから登録したいと言うのが主な理由です。

たとえば、5万人のメーリングリストからメールを送信して1000人のメールアドレスが配信不能で返信されたとき、これらのメールアドレスを自動的にメーリングリストから削除するのに何か良い方法ありませんか。


引用:
ところで、Dr ADO.NETさんは書き込み専門なんですか?いくつか(私も含め)スレにRESが付いているようですが、すべて無視されているのには何か理由があるのでしょうか?



とくに理由はありませんが、どちらかと言うとあまり議論するのが得意ではありません。返信についてはなるべくお答えするように努力します。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2002-04-17 21:54
引用:
これは、たぶんSMTP(RFC821)のVRFYコマンドを使って実現しているとおもうのですが、
個人情報の漏洩とかいう問題で、このコマンドの実行を許可しないサーバが多いのでは?



.NET版のHexValidMail がリリースされたら、私のメルマガのメーリングリスト(5000件)でチェックして見ます。メールを実際に送信しないで、そのメールアドレスが配信不能かどうかチェックできればメーリングリストのクリーンナップに便利ですよね!

HexValidEmail のサイトには、メーリングリストに配信不能なメールアドレスが含まれると次の問題があると指摘しています。たしかに、5万人のメーリングリストに千人の配信不能なメールアドレスが含まれていたら問題ですよね?

・Wasted time and bandwidth
・Annoyed or lost customers
・Mail software crashes
・Inaccurate subscriber statistics

http://www.hexillion.com/samples/ValidateEmail.asp
をクリックすると Online でメールアドレスのチェックができます。

・try VRFY and EXPN
・require MX records

などがオプションになっているようです。


[ メッセージ編集済み 編集者: Dr ADO.NET 編集日時 2002-04-17 23:02 ]
uda
会議室デビュー日: 2001/12/28
投稿数: 13
投稿日時: 2002-04-18 11:09
引用:

http://www.hexillion.com/samples/ValidateEmail.asp
をクリックすると Online でメールアドレスのチェックができます。



試してみました。SMTPレベルのバリデーションを行いました。
RCPT コマンドを発行してエラーを返すかどうかをチェックしていました。
っが、このコマンドはすでに存在しないアカウントでもエラーにしないのが
セキュリティ的には当たり前といった状態ではないでしょか。
(ちなみに、自社サーバ向けにテスト)

また、hotmailは返事をしてくれませんでした・・・。


がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2002-04-18 11:59
ちと最近色々気になっていたので、少しだけ。

引用:

メールを実際に送信しないで、その メールアドレスが配信不能かどうかチェックできればメーリングリストのクリ ーンナップに便利ですよね!


という機能が、本当に「何の問題もなく」利用できれば便利なのでしょうが。
要求としての「本当に正しい(使われている)メールアドレスを把握したい」というのは、とてもよく理解できます。
しかし現実にそれを実装するには
・到着先のサーバ以外にデータを保持しているところがない
・サーバに問い合わせると、それは容易にDosアタックに変じる
と、あっというまに壁にぶつかります。
ちなみに、私も自宅にサーバを組んだり、他者のサーバを組んだりしておりますが。RCPTコマンドは全て「とりあえず受け入れておく」設定になっています。エラーメールでさえ、Fromに返さないところも多々あります(無論、セキュリティー的に理由があっての事です)。

(使う人にとって便利な)要求に近づける何らかの方法を常に模索する、というのは重要なことではあるのですが。同時に「それを行おうとした場合に、悪意ある人々が行い得る」出来事に心をはせることも同様に重要だと思います。

他の掲示板でのHTMLメールを見ても思っていたのですが。
便利さを追求するのはもちろん重要なことですが、思いついたことに対して「一歩下がり」、セキュリティーや実装方法に思いを馳せることもまた、それ以上に重要なことだと思います、もしDr ADO.NETさんがシステムを作る側の人間であるのだとすれば。
なぜなら、利便性はユーザでも色々と思いつきます。アイデアは、実際に使っていればいくらでも出てくるものです。しかし、そこに潜む危険性を看破し事前に対策を練ることは、それを持ってシステムをセキュアに保つことは、専門家であるシステム屋さんのお仕事なのです。

Dr ADO.NETを含む、これを読まれている全ての技術系の人が。
利便性の裏に潜む危険を、その利便性を(可能な限り)損なわず、かつ「問題ないレベルで」安全なシステムを組むことに興味を持っていただければ、と願ってやみません。
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2002-04-18 13:31
 単純にメーリングリストの登録の問題に限れば、機械的な確認ではなく、本人に確認のメールを送った方が良いと思います。確認メールへの返送された時点で正規のアドレスと認めるようにすれば、確かにメールを受け取れるアドレスであることが確認できるだけでなく、イタズラ登録の可能性も排除できます。

スキルアップ/キャリアアップ(JOB@IT)