Email-Valid-0.184 > Email::Valid

名前

Email::Valid - インターネット電子メールアドレスの正当性のチェック

概要

  use Email::Valid;
  print (Email::Valid->address('maurice@hevanet.com') ? 'yes' : 'no');

説明

このモジュールは、電子メールアドレスが適格であるか否かを判断します。 さらに、そのドメインのメールホストが存在するか否かも判断します。

実際に配送することなしに電子メールアドレスが配送可能か否かを 判断することはできないということに留意してください。 (詳細については、perlfaq 9 を見てください。)

PREREQUISITES

このモジュールは perl 5.004 以降と Mail::Address を要求します。 また、DNS チェックのために Net::DNS モジュールか nslookup ユーティリティのどちらかを要求します。Net::Domain::TLD モジュールは トップレベルドメインの妥当性チェックのために必要です。

メソッド

  <ADDRESS> パラメータを受け取るための全てのメソッドには、
  文字列か Mail::Address クラスのインスタンスのどちらかを
  渡すことができます。全てのエラーには例外が発生します。
new ( [PARAMS] )

このメソッドは、Email::Valid オブジェクトを生成します。 パラメータの名前のオプションのリストを渡すことによって オブジェクトの振る舞いを変更することができます。

許可されているパラメータの名前は次のものです。 個々の詳細は下にある説明を見てください。

 -mxcheck
 -tldcheck
 -fudge
 -fqdn
 -local_rules
mx ( <ADDRESS>|<DOMAIN> )

このメソッドは、電子メールアドレスかドメイン名を渡すことによって、 (A か MX の)DNS レコードが存在するか否かを判断します。

このメソッドはレコードが見つかったならば true を、そうでない ならば undef を返します。

DNS チェックには、Net::DNS モジュールか nslookup ユーティリティの どちらかが必要です。Net::DNS モジュールを用いた方が、良いエラー ハンドリングを得ることができます。もし、Net::DNS モジュールが 利用できるならば、あなたは $Email::Valid::Resolver に格納されている グローバルな Net::DNS::Resolver インスタンスの操作によって (例えば tcp_timeout の初期値を変更するなどの)レゾルバの振る舞いを 変更することができます。

tld ( <ADDRESS> )

このメソッドは、アドレスのドメインパートが承認されているトップレベルドメインであるのかを判定します。

rfc822 ( <ADDRESS> )

このメソッドは、アドレスが RFC822 の仕様に従っているか否かを 判断します。但し、ネストしたコメントには対応していません。 仕様に従っているならば true を、そうでないならば undef を返します。

fudge ( <TRUE>|<FALSE> )

address() が呼ばれた際に、一般的なアドレスのエラーがあれば 修正しようと試みます。今のところは、AOL のアドレスの場合は、 空白文字を削除し、Compuserve アドレスの場合は、コンマをピリオドに 置換します。初期値は false です。

fqdn ( <TRUE>|<FALSE> )

address() にアドレスが渡されたときに正規の完全なドメイン名(FQDN)を 持つのかをチェックします。初期値は true です。

local_rules ( <TRUE>|<FALSE> )

address() にアドレスが渡されたときに特定の制約事項を持つドメインの アドレスをチェックします。今のところは AOL の制約事項の検出に 限定されています。初期値は false です。

mxcheck ( <TRUE>|<FALSE> )

address() にアドレスが渡されたときに正しい DNS エントリーで あるのかをチェックします。初期値は false です。

tldcheck ( <TRUE>|<FALSE> )

address() にアドレスが渡されたときに正しいトップレベルドメインで あるのかをチェックします。初期値は false です。

address ( <ADDRESS> )

電子メールアドレスが正当である(valid)か否かを判断するための 主要な(primary)メソッドです。mxcheck() や tldcheck()、local_rules()、 fqdn()、fudge() の値によって振る舞いを変更できます。もし、 アドレスが全てのチェックで問題がなかったならば、 (場合によっては修正された)アドレスを文字列として返します。 そうでなければ、未定義値を返します。リストコンテキストならば、 電子メールアドレスを表現するクラスである Mail::Address の インスタンスも返します。

details ()

最後に呼ばれた address() が undef を返したときに、 どのチェック項目で失敗したのかを返します。 次の値が用意されています。

 rfc822
 local_rules
 fqdn
 mxcheck  
 tldcheck

もし、クラスのインスタンスを生成していないならば、グローバル変数 $Email::Valid::Details から同様の情報を得ることができます。

それでは、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 <Neuman @ foo.bar>');
  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 $@; 

バグ

Email::Valid は Perl for Win32 で動作します。しかし、私の経験では、 Net::DNS クエリを使ったとしても、レコードを見つけることが できなかった際に極めて長い時間待たされるように思います。

作者

Copyright 1998-2003, Maurice Aubrey <maurice@hevanet.com>. All rights reserved.

This module is free software; you may redistribute it and/or modify it under the same terms as Perl itself.

CREDITS

このモジュールの大部分は、Tom Christiansen によって書かれた ckaddr プログラムと Jeffrey Friedl によって書かれた RFC822 アドレスの正規表現 をベースにしています。 どちらもこのモジュールの構築には関係ありません。 全ての誤りは私自身に責任があります。

下に挙げる人々の示唆やバグ修正に大変感謝しています。

  Otis Gospodnetic <otis@DOMINIS.com>
  Kim Ryan <kimaryan@ozemail.com.au>
  Pete Ehlke <pde@listserv.music.sony.com> 
  Lupe Christoph
  David Birnbaum
  Achim
  Elizabeth Mattijsen (liz@dijkmat.nl)

SEE ALSO

Mail::Address, Net::DNS, Net::Domain::TLD, perlfaq9