TOP

ヘッダーを表示させよう

ヘッダーの表示(次の30件)

前回に引き続き、ヘッダーの表示。
前回は最新〜30件のヘッダーの表示のみを行った。
最新のメール番号は、ソケット接続時に取得した変数[$mcount]〜[$mcount-$Dispnum]とした。※前回の最後、17行目参照

したがって、以下のように考える。
一ページ目=[($mcount-0)]〜[$mcount-$Dispnum]
二ページ目=[($mcount-30)]〜[($mcount-30)-$Dispnum]
三ページ目=[($mcount-60)]〜[($mcount-60)-$Dispnum]

整理すると、こうなる。
一ページ目=[$mcount-($Dispnum*0)]〜[$mcount-($Dispnum*0)-$Dispnum]
二ページ目=[$mcount-($Dispnum*1)]〜[$mcount-($Dispnum*1)-$Dispnum]
三ページ目=[$mcount-($Dispnum*2)]〜[$mcount-($Dispnum*2)-$Dispnum]

次に、ページ部分をどのように持ってくるかだが、これはGETを使用する。
所謂URLの引数部分。http://www.example.com/test.cgi?page=1の部分。

引数の数字に従ってページ移動する。ただし、引数が無い場合は0とする。

 1: #!/usr/bin/perl
 2: print "Content-type:text/html\n\n";
 3: use Socket;
 4:
 5: #---接続情報の設定-----
 6: $pop_server="pop.grot3.com";	#POPサーバー名の指定(サーバ名は仮定です)
 7: $account="grot3";		#POPサーバー用アカウント(仮定です)
 8: $password="1234567";		#POPサーバー用パスワード(仮定です)
 9:
10: #-----表示内容の分岐
11: $query=$ENV{QUERY_STRING};		#URLの引数部分の取得
12: if($query eq ""){			#引数が無い場合、ヘッダー表示(0)
13: 	&HeaderList(0);
14: } elsif ($query =~ m/page/i){		#引数(page)がある場合、指定ページを開く
15: 	@args=split(/=/ , $query);
16: 	&HeaderList(@args[1]);
17: }
18:
19: #----------------------------------------------
20: #受信メール表示--(ヘッダー一覧)
21: #----------------------------------------------
22: sub HeaderList{
23: 	&ConnectPop;			#サブプロシージャ(ConnectPop)の呼び出し
24: 	#--最新メール〜任意件数分の表示-----
25: 	$Dispnum=30;	#一ページでの表示件数
26: 	$Disppage=$mcount - ($Dispnum * $_[0]);
27:
28: 	print "<TABLE border=1><TR bgcolor=#98FB98><TH>番号</TH><TH>差出</TH><TH>件名</TH><TH>日時</TH></TR>\n";
29:
30: 	for ($i = $Disppage; $i > $Disppage - $Dispnum; $i--) {
31: 		if($i lt 1){last;}				#メール番号1より小さいものを処理しなし
32: 		print SOCKET "TOP $i 0\n";			#ヘッダー表示のコマンド
33: 		while (<SOCKET>){
34:			$resp=$_;
35:			if($resp eq "\.\r\n"){last;}	#メール表示の最終行は必ず[.(ドット)]のみの行のため
36:			&MailHeader($resp);		#サブプロシージャ(MailHeader)の呼び出し
37:		}
38:		print "<TR><TD>$i</TD><TD>$From</TD><TD>$Subject</TD><TD>$Date</TD>\n";
39: 	}
40: 	print "</TABLE>\n";
41:
42: 	close (SOCKET);		#ソケット接続の終了
43: }
44:
45: #----------------------------------------------
46: #接続
47: #----------------------------------------------
48: sub ConnectPop{
		〜省略〜
49: }
50:
51: #----------------------------------------------
52: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
53: #----------------------------------------------
54: sub MailHeader{
		〜省略〜
55: }
メモ:
11〜17行で引数を元にヘッダーの表示件数を制御しています。
22〜43行目をサブプロシージャとしてくくりました。



 1: #!/usr/bin/perl
 2: print "Content-type:text/html\n\n";
 3: use Socket;
 4: use File::Basename qw(basename);
 5: $this_Filename = basename($0, '');	#ファイル名の取得
 6:
 7: #---接続情報の設定-----
 8: $pop_server="pop.grot3.com";	#POPサーバー名の指定(サーバ名は仮定です)
 9: $account="grot3";		#POPサーバー用アカウント(仮定です)
10: $password="1234567";		#POPサーバー用パスワード(仮定です)
11:
12: #-----表示内容の分岐
13: $query=$ENV{QUERY_STRING};		#URLの引数部分の取得
14: if($query eq ""){			#引数が無い場合、ヘッダー表示(0)
15: 	&HeaderList(0);
16: } elsif ($query =~ m/page/i){		#引数(page)がある場合、指定ページを開く
17: 	@args=split(/=/ , $query);
18: 	&HeaderList(@args[1]);
19: }
20:
21: #----------------------------------------------
22: #受信メール表示--(ヘッダー一覧)
23: #----------------------------------------------
24: sub HeaderList{
25: 	&ConnectPop;			#サブプロシージャ(ConnectPop)の呼び出し
26: 	#--最新メール〜任意件数分の表示-----
27: 	$Dispnum=30;	#一ページでの表示件数
28: 	$Disppage=$mcount - ($Dispnum * $_[0]);
29:
30: 	#-----【<<先頭へ <前へ 次へ> 最後へ>>】の処理
31: 	$Pagenum=int($_[0]);		#現在のページ
32: 	$beforePage=$_[0]-1;		#前
33: 	$nextPage=$_[0]+1;			#次
34: 	$lastPage=int($mcount/$Dispnum);	#最後
35:
36: 	if($Pagenum > 0){
37: 		print "&lt;&lt;<A href=$this_Filename>先頭へ</A> &lt;<A href=$this_Filename?page=$beforePage>前へ</A>";
38: 	}
39: 	if($Pagenum <= $lastPage){
40: 		print " <A href=$this_Filename?page=$nextPage>次へ</A>&gt; <A href=$this_Filename?page=$lastPage>最後へ</A>&gt;&gt;<BR>\n";
41: 	} else {print "<BR>";}
42:
43: 	print "<TABLE border=1><TR bgcolor=#98FB98><TH>番号</TH><TH>差出</TH><TH>件名</TH><TH>日時</TH></TR>\n";
44:
45: 	for ($i = $Disppage; $i > $Disppage - $Dispnum; $i--) {
46: 		if($i lt 1){last;}				#メール番号1より小さいものを処理しなし
47: 		print SOCKET "TOP $i 0\n";			#ヘッダー表示のコマンド
48: 		while (<SOCKET>){
49:			$resp=$_;
50:			if($resp eq "\.\r\n"){last;}	#メール表示の最終行は必ず[.(ドット)]のみの行のため
51:			&MailHeader($resp);		#サブプロシージャ(MailHeader)の呼び出し
52:		}
53:		print "<TR><TD>$i</TD><TD>$From</TD><TD>$Subject</TD><TD>$Date</TD>\n";
54: 	}
55: 	print "</TABLE>\n";
56:
57: 	close (SOCKET);		#ソケット接続の終了
58: }
59:
60: #----------------------------------------------
61: #接続
62: #----------------------------------------------
63: sub ConnectPop{
		〜省略〜
64: }
65:
66: #----------------------------------------------
67: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
68: #----------------------------------------------
69: sub MailHeader{
		〜省略〜
70: }
メモ:
4〜5行目でリンクの準備として、自身のファイル名を取得
あとの追加部分は見ればわかると思います。また、表示部分なのでここはお好みに…


<前へ  4  次へ>