Email::Valid の挙動に疑問が・・・

FormValidator::Simple をインストールする為、依存しているモジュール Email::Valid をインストールしようとしたが・・・ make test で一カ所エラーになる。

t/valid.t を覗くと

46 $v->address( -address => 'blort@aol.com',
47              -mxcheck => 1) ? ok : not_ok;
48 $v->address( -address => 'blort@notarealdomainfoo.com',
49              -mxcheck => 1) ? not_ok : ok;

どうやら、48・49 行目がイケてないらしい。

で、blib/lib/Email/Valid.pm を調べてみると

114 # Purpose: perform DNS query using the Net::DNS module
115 sub _net_dns_query {
116   my $self = shift;
117   my $host = shift;
118 
119   $Resolver = Net::DNS::Resolver->new unless defined $Resolver;
120 
121   my $packet = $Resolver->send($host, 'A') or croak $Resolver->errorstring;
122   return 1 if $packet->header->ancount;
123 
124   $packet = $Resolver->send($host, 'MX') or croak $Resolver->errorstring;
125   return 1 if $packet->header->ancount;
126 
127   return $self->details('mx');
128 }

122行目で、aol.com だろうが notarealdomainfoo.com だろうが、Answer セクションの回答数が 0 以外であれば問答無用で数値 1 を返しており、それ故、「$v->address( -address => 'blort@notarealdomainfoo.com', -mxcheck => 1) ? not_ok : ok;」が OK となってしまっていた。

ちなみに

% dig a notarealdomainfoo.com

; <<>> DiG 9.2.2 <<>> a notarealdomainfoo.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12725
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;notarealdomainfoo.com.         IN      A

;; ANSWER SECTION:
notarealdomainfoo.com.  2869    IN      A       66.45.225.11

;; Query time: 5 msec
;; SERVER: XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX)
;; WHEN: Mon Mar  6 15:16:16 2006
;; MSG SIZE  rcvd: 55

ここって、MXレコードのチェックが重要なのだから、Aレコードのチェックをザックリ消すか、AレコードのチェックがOKだった場合に処理を終了せずに、MXレコードのチェックをするのが正しいんじゃないだろうか?

とりあえず、気が向いたら作者様にメール送ってみよう・・・。