< Windows Xp で、Ctrl + Alt + Del で、「Windowsのセキュリティ」画面が表示される条件 | SI Object Browser 7 BDE設定 >

February 13, 2004

メールアドレスの正当性チェックを実行する

Net::DNSを使用した実装例です。

Email::Validを使用すると可能なのですが、リトライする、レコードなしはNGだが、タイムアウトなどのエラーはとりあえずOKとするなど、柔軟性がほしかったので作ってみたもの。でもよく考えたら、ここに載せなくても、Email::Validのソースをみたらいつでもよいサンプルになるのかもしれません。

use Email::Valid::Loose;
use Net::DNS::Resolver;
	
# メールアドレスのチェック関数
sub check_mail {
	my $valid		= new Email::Valid::Loose;
	my $resolver	= new Net::DNS::Resolver;
	my $target	= $_[0];
	my $ret		= 1;
	
	$resolver->tcp_timeout( 60 );
	$resolver->udp_timeout( 60 );
	
	if ( $target ) {
		
		# RFCチェック
		$ret = $valid->address( -address => $target );
		return undef unless( $ret );
		
		my $host	= $valid->_host( $target );
		
		# MXレコード検索
		my $retry	= 3;
		my $packet	= undef;
		while( $retry-- ) {
			$packet	= $resolver->send( $host, 'MX' );
			
			if ( defined $packet ) {
				$_[0]	= $target;
				return 1 if ( $packet->header->ancount );	#レコードありの場合
				last;
			}
			sleep 5;
		}
		
		# Aレコード検索
		$retry	= 3;
		$packet	= undef;
		while( $retry-- ) { 
			$packet	= $resolver->send( $host, 'A' );
			
			if ( defined $packet ) {
				$_[0]	= $target;
				return 1 if ( $packet->header->ancount );	#レコードありの場合
				return undef;
			}
			sleep 5;
		}
		
		# エラーはOKを返す
		return 1;
	}
	return 0;
}

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/163

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?