=encoding euc-jp =head1 NAME Email::Valid - インターネット電子メールアドレスの正当性のチェック =head1 SYNOPSIS use Email::Valid; print (Email::Valid->address('maurice@hevanet.com') ? 'yes' : 'no'); =head1 DESCRIPTION このモジュールは、電子メールアドレスが適格であるか否かを判断します。 さらに、そのドメインのメールホストが存在するか否かも判断します。 実際に配送することなしに電子メールアドレスが配送可能か否かを 判断することはできないということに留意してください。 (詳細については、perlfaq 9 を見てください。) =head1 PREREQUISITES このモジュールは perl 5.004 以降と Mail::Address を要求します。 また、DNS チェックのために Net::DNS モジュールか nslookup ユーティリティのどちらかを要求します。Net::Domain::TLD モジュールは トップレベルドメインの妥当性チェックのために必要です。 =head1 METHODS
パラメータを受け取るための全てのメソッドには、 文字列か Mail::Address クラスのインスタンスのどちらかを 渡すことができます。全てのエラーには例外が発生します。 =over 4 =item new ( [PARAMS] ) このメソッドは、Email::Valid オブジェクトを生成します。 パラメータの名前のオプションのリストを渡すことによって オブジェクトの振る舞いを変更することができます。 許可されているパラメータの名前は次のものです。 個々の詳細は下にある説明を見てください。 -mxcheck -tldcheck -fudge -fqdn -local_rules =item mx (
| ) このメソッドは、電子メールアドレスかドメイン名を渡すことによって、 (A か MX の)DNS レコードが存在するか否かを判断します。 このメソッドはレコードが見つかったならば true を、そうでない ならば undef を返します。 DNS チェックには、Net::DNS モジュールか nslookup ユーティリティの どちらかが必要です。Net::DNS モジュールを用いた方が、良いエラー ハンドリングを得ることができます。もし、Net::DNS モジュールが 利用できるならば、あなたは $Email::Valid::Resolver に格納されている グローバルな Net::DNS::Resolver インスタンスの操作によって (例えば tcp_timeout の初期値を変更するなどの)レゾルバの振る舞いを 変更することができます。 =item tld (
) このメソッドは、アドレスのドメインパートが承認されているトップレベルドメインであるのかを判定します。 =item rfc822 (
) このメソッドは、アドレスが RFC822 の仕様に従っているか否かを 判断します。但し、ネストしたコメントには対応していません。 仕様に従っているならば true を、そうでないならば undef を返します。 =item fudge ( | ) address() が呼ばれた際に、一般的なアドレスのエラーがあれば 修正しようと試みます。今のところは、AOL のアドレスの場合は、 空白文字を削除し、Compuserve アドレスの場合は、コンマをピリオドに 置換します。初期値は false です。 =item fqdn ( | ) address() にアドレスが渡されたときに正規の完全なドメイン名(FQDN)を 持つのかをチェックします。初期値は true です。 =item local_rules ( | ) address() にアドレスが渡されたときに特定の制約事項を持つドメインの アドレスをチェックします。今のところは AOL の制約事項の検出に 限定されています。初期値は false です。 =item mxcheck ( | ) address() にアドレスが渡されたときに正しい DNS エントリーで あるのかをチェックします。初期値は false です。 =item tldcheck ( | ) address() にアドレスが渡されたときに正しいトップレベルドメインで あるのかをチェックします。初期値は false です。 =item address (
) 電子メールアドレスが正当である(valid)か否かを判断するための 主要な(primary)メソッドです。mxcheck() や tldcheck()、local_rules()、 fqdn()、fudge() の値によって振る舞いを変更できます。もし、 アドレスが全てのチェックで問題がなかったならば、 (場合によっては修正された)アドレスを文字列として返します。 そうでなければ、未定義値を返します。リストコンテキストならば、 電子メールアドレスを表現するクラスである Mail::Address の インスタンスも返します。 =item details () 最後に呼ばれた address() が undef を返したときに、 どのチェック項目で失敗したのかを返します。 次の値が用意されています。 rfc822 local_rules fqdn mxcheck tldcheck もし、クラスのインスタンスを生成していないならば、グローバル変数 $Email::Valid::Details から同様の情報を得ることができます。 =back =head1 EXAMPLES それでは、RFC822 の仕様に従っている 'maurice@hevanet.com' という アドレスでの例を見てみましょう。 print (Email::Valid->address('maurice@hevanet.com') ? 'yes' : 'no'); 更に、メールホストを確認してみましょう。 print (Email::Valid->address( -address => 'maurice@hevanet.com', -mxcheck => 1 ) ? 'yes' : 'no'); アドレスを修正する場合の例を見てみましょう。 $addr = Email::Valid->address('Alfred Neuman '); print "$addr\n"; # prints Neuman@foo.bar トップレベルドメインのチェックを追加してみましょう。 $addr = Email::Valid->address( -address => 'Neuman@foo.bar', -tldcheck => 1 ); print "$addr\n"; # doesn't print anything 何故アドレスが正しくないのかの理由が必要な場合は次のようになります。 unless(Email::Valid->address('maurice@hevanet')) { print "address failed $Email::Valid::Details check.\n"; } エラーがあった場合に例外を発生させます。これは、DNS クエリを実行 したときだけ使えます。eval ブロックで括ることによって、 例外を捕捉します。 eval { $addr = Email::Valid->address( -address => 'maurice@hevanet.com', -mxcheck => 1 ); }; warn "an error was encountered: $@" if $@; =head1 BUGS Email::Valid は Perl for Win32 で動作します。しかし、私の経験では、 Net::DNS クエリを使ったとしても、レコードを見つけることが できなかった際に極めて長い時間待たされるように思います。 =head1 AUTHOR Copyright 1998-2003, Maurice Aubrey Emaurice@hevanet.comE. All rights reserved. This module is free software; you may redistribute it and/or modify it under the same terms as Perl itself. =head1 CREDITS このモジュールの大部分は、Tom Christiansen によって書かれた ckaddr プログラムと Jeffrey Friedl によって書かれた RFC822 アドレスの正規表現 をベースにしています。 どちらもこのモジュールの構築には関係ありません。 全ての誤りは私自身に責任があります。 下に挙げる人々の示唆やバグ修正に大変感謝しています。 Otis Gospodnetic Kim Ryan Pete Ehlke Lupe Christoph David Birnbaum Achim Elizabeth Mattijsen (liz@dijkmat.nl) =head1 SEE ALSO Mail::Address, Net::DNS, Net::Domain::TLD, perlfaq9