TOP

本文を表示しよう

本文の表示1

 1: #!/usr/bin/perl
 2: print "Content-type:text/html\n\n";
 3: print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
 4: use Socket;
 5: use Jcode;
 6: use File::Basename qw(basename);
 7: $this_Filename = basename($0, '');	#ファイル名の取得
 8:
 9: #---接続情報の設定-----
10: $pop_server="pop.grot3.com";	#POPサーバー名の指定(サーバ名は仮定です)
11: $account="grot3";		#POPサーバー用アカウント(仮定です)
12: $password="1234567";		#POPサーバー用パスワード(仮定です)
13:
14: #-----表示内容の分岐
15: $query=$ENV{QUERY_STRING};		#URLの引数部分の取得
16: if($query eq ""){			#引数が無い場合、ヘッダー表示(0)
17: 	&HeaderList(0);
18: } elsif ($query =~ m/page/i){		#引数(page)がある場合、指定ページを開く
19: 	@args=split(/=/ , $query);
20: 	&HeaderList(@args[1]);
21: } elsif ($query =~ m/mailno/i){		#引数(mailno)がある場合、メール本文を開く
22: 	@args=split(/=/ , $query);
23: 	&MailBody(@args[1]);
24: }
25:
26: #----------------------------------------------
27: #受信メール表示--(本文)
28: #----------------------------------------------
29: sub MailBody{
30: 	&ConnectPop;			#サブプロシージャ(ConnectPop)の呼び出し
31: 	print SOCKET "RETR $_[0]\n";	#メール内容の表示コマンド
32: 	while (<SOCKET>){
33: 		$resp=$_;
34: 		if($resp eq "\.\r\n"){last;}
35: 		print "$resp\n";
36: 		print "<PRE>\n";
37: 	}
38: 	print "</PRE>\n";
39: 	close (SOCKET);		#ソケット接続の終了
40: }
41:
42: #----------------------------------------------
43: #受信メール表示--(ヘッダー一覧)
44: #----------------------------------------------
45: sub HeaderList{
		〜省略〜
46:	print "<TR><TD><A href=$this_Filename?mailno=$i target=_blank>$i</A></TD><TD>$From</TD><TD>$Subject</TD><TD>$Date</TD></TR>\n";
		〜省略〜
47: }
48:
49: #----------------------------------------------
50: #接続
51: #----------------------------------------------
52: sub ConnectPop{
		〜省略〜
53: }
54:
55: #----------------------------------------------
56: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
57: #----------------------------------------------
58: sub MailHeader{
		〜省略〜
59: }
メモ:
21〜24行目に引数による分岐を追加。
29〜40行目に本文処理のサブプロシージャの箱を用意。(現在は、POPにあるメール内容をそのまま表示するのみ)
46行目に、メール本文のためのアンカーを追記。



本文の表示2

 1: #!/usr/bin/perl
 2: print "Content-type:text/html\n\n";
 3: print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
 4: use Socket;
 5: use Jcode;
 6: use File::Basename qw(basename);
 7: $this_Filename = basename($0, '');	#ファイル名の取得
 8:
 9: #---接続情報の設定-----
10: $pop_server="pop.grot3.com";	#POPサーバー名の指定(サーバ名は仮定です)
11: $account="grot3";		#POPサーバー用アカウント(仮定です)
12: $password="1234567";		#POPサーバー用パスワード(仮定です)
13:
14: #-----表示内容の分岐
15: $query=$ENV{QUERY_STRING};		#URLの引数部分の取得
16: if($query eq ""){			#引数が無い場合、ヘッダー表示(0)
17: 	&HeaderList(0);
18: } elsif ($query =~ m/page/i){		#引数(page)がある場合、指定ページを開く
19: 	@args=split(/=/ , $query);
20: 	&HeaderList(@args[1]);
21: } elsif ($query =~ m/mailno/i){		#引数(mailno)がある場合、メール本文を開く
22: 	@args=split(/=/ , $query);
23: 	&MailBody(@args[1]);
24: }
25:
26: #----------------------------------------------
27: #受信メール表示--(本文)
28: #----------------------------------------------
29: sub MailBody{
30: 	&ConnectPop;			#サブプロシージャ(ConnectPop)の呼び出し
31: 	$Stage="head";			#変数[Stage]の初期化
32: 	print SOCKET "RETR $_[0]\n";	#メール内容の表示コマンド
33: 	while (<SOCKET>){
34: 		$resp=$_;
35: 		if($resp eq "\.\r\n"){last;}
36:		if($resp ne "\r\n"){$resp=~s/\r\n//g;}			#改行を削除
37:
38: 		#---ヘッダー部の表示-----
39: 		if($Stage eq "head"){
40: 			&MailHeader($resp);		#サブプロシージャ[MailHeader]で一行ずつ処理
41: 			if($resp eq "\r\n"){		#一つ目の改行の検知
42: 				$Stage="body";		#変数[Stage]をBodyに
43: 				$To = jcode($To)->mime_decode->sjis;
44: 				$From = jcode($From)->mime_decode->sjis;
45: 				$Subject = jcode($Subject)->mime_decode->sjis;
46: 				print "<TABLE border=0 bgcolor=#D4D0C8>\n";
47: 				print "<TR><TD align=left valign=top nowrap><B>送信者:</B></TD><TD>$From<HR></TD></TR>\n";
48: 				print "<TR><TD align=left valign=top nowrap><B>日時:</B></TD><TD>$Date<HR></TD></TR>\n";
49:  				print "<TR><TD align=left valign=top nowrap><B>宛先:</B></TD><TD>$To<HR></TD></TR>\n";
50: 				print "<TR><TD align=left valign=top nowrap><B>件名:</B></TD><TD>$Subject<HR></TD></TR>\n";
51: 				print "</TABLE>\n";
52: 				print "<BR>\n";
53: 				print "<PRE>\n";
54: 				next;
55: 			}
56: 			next;
57: 		}
58: 	}
59: 	print "</PRE>\n";
60: 	close (SOCKET);		#ソケット接続の終了
61: }
62:
63: #----------------------------------------------
64: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
65: #----------------------------------------------
66: sub HeaderList{
		〜省略〜
67: }
68:
69: #----------------------------------------------
70: #接続
71: #----------------------------------------------
72: sub ConnectPop{
		〜省略〜
73: }
74:
75: #----------------------------------------------
76: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
77: #----------------------------------------------
78: sub MailHeader{
		〜省略〜
79: }
メモ:
メールの[ヘッダー][ボディー][添付ファイル]の各部分処理中のフラグとして変数[Stage]を使用
39〜57行目でヘッダー部分を処理。内37〜52行目が一つ目の改行を見つけた場合の処理。[Stage]head→body
ヘッダーの表示方法はお好みで。


<前へ  7  次へ>