ヘッダーを表示させよう
ヘッダーの表示(次の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 "<<<A href=$this_Filename>先頭へ</A> <<A href=$this_Filename?page=$beforePage>前へ</A>";
38: }
39: if($Pagenum <= $lastPage){
40: print " <A href=$this_Filename?page=$nextPage>次へ</A>> <A href=$this_Filename?page=$lastPage>最後へ</A>>><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行目でリンクの準備として、自身のファイル名を取得
あとの追加部分は見ればわかると思います。また、表示部分なのでここはお好みに…