[Perl] POP3

  メール受信テスト



  
#!/usr/local/bin/perl

# **********************************************************
# メール受信テストサンプル
#
# 実行時、HTML 上で <> で挟まれたメールアドレス等は
# 表示されないのでソースを確認する必要があります
# **********************************************************

print "Content-Type: text/html; Charset=Shift_JIS\n";
print "\n";

$server_name = "ドメイン";
$user_name = "ユーザ.ドメイン";
$user_pass = "パスワード";

# メールを受信します
use Net::POP3;
# メールデータを解析します
use MIME::Parser;
# メールヘッダのデコードをします(日本語が混じっている情報)
# decode_mimewords のみをインポート
# 他に encode_mimeword がある
# 全てインポートは use MIME::Words qw(:all);
use MIME::Words qw(decode_mimewords);
# メールデータの JIS を SHIFT_JIS に変換します
use Jcode;

# 接続
$objPop3 = eval{ Net::POP3->new($server_name) or die "ERR"; };
if ( !$objPop3 ) {
	if (substr($@,0,3) eq 'ERR') {
		print "接続できませんでした";
	}
	else {
		print $@;
	}
	exit();
}
#$objPop3 = Net::POP3->new($server_name) or die "ERR";

# メールデータ解析用オブジェクト作成
$objParse = new MIME::Parser;
# 既存のデイレクトリにデータを出力します
# ここで、pop3 はディレクトリ名
# 省略するとカレントディレクトリ
#$objParse->output_dir('pop3');
# メモリ上で行ないます
$objParse->output_to_core(1);

# ログイン
# $nMessage にはメッセージ数が返ります
$nMessage = $objPop3->login($user_name,$user_pass);

print "メッセージ数は $nMessage 件です<br>\n";

#ハッシュの参照が戻されます
$msgid = $objPop3->list();

# % を付けてハッシュとして操作
# メッセッージ番号逆順ソート用コンバート
foreach $key ( keys %$msgid ) {
	$sortdata{sprintf("%03d", 1000 - $key)} = $$msgid{$key};
}

# 新着順
foreach $key ( sort keys %sortdata ) {
	$value = $sortdata{$key};
	# メッセッージ番号を元へ戻す
	$key = 1000 - $key;

	# この場合、$key にメッセージ番号、$value には大きさが入ります
	print "$key = $value<BR>\n";

	# メッセージ番号に対応するテキスト行が入った
	# 配列への参照(変数名そのもの)
	$objMail = $objPop3->get($key);

	# $#$objMail が配列の最後の添え字
	print "* ---------- 全てのヘッダ情報<br>\n";
	for( $i = 0; $i <= $#$objMail; $i++ ) {
		print $$objMail[$i] . "<br>\n";
	}

	print "* ---------- 個別ヘッダ情報<br>\n";
	# 該当メールメッセージを解析する
	# MIME::Entity を返します
	$entity = $objParse->parse_data($objMail);

	# MIME::Headを返します
	$head = $entity->head;

	# 該当ヘッダ情報を文字列で返します
	$data = $head->get('From');
	chomp($data);
	print "From : $data<br>\n";

	$data = $head->get('To');
	chomp($data);
	print "To : $data<br>\n";

	print "* ---------- Subject情報<br>\n";
	# Subject のみデコードしているが、From や To にも必要
	$data = $head->get('Subject');
	chomp($data);
	print "Subject : $data<br>\n";

	# キャラクタセット毎の配列が返される
	@decode = decode_mimewords( $data );
	# 配列の要素は、さらにデータとキャラクタセットの配列となる
	$text = "";
	foreach $data ( @decode ){
		# $data に @ を付けて配列扱い
		($target,$charset) = @$data;
		# キャラクタセットは入っていない場合もある
		print "charset=$charset<br>\n";
		# ここでは、shift_jis に固定変換(本来は$charset で決める)
		Jcode::convert(\$target, 'sjis', 'jis');
		# 改行を置換
		$target =~ s/\n//g;
		$text .= $target
	}
	print "Subject : " . $text;
	print "<br>\n";
	

	print "* ---------- 本文情報<br>\n";
	# MIME::Body を返します
	$body = $entity->bodyhandle;

	# 本文を文字列として返します
	$data = $body->as_string;
	# shift_jis へ変換
	Jcode::convert(\$data, 'sjis', 'jis');
	# trim
	$data =~ s/^\s+//;
	$data =~ s/\s+$//;
	print $data . "<br>\n";

	print "<br><br><br>";
}


# 接続解除
$objPop3->quit;
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ