=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