本文を表示しよう
本文の表示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
ヘッダーの表示方法はお好みで。