追加のデコード
本文がbase64の場合
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: require './code/mimew.pl';
7: use File::Basename qw(basename);
8: $this_Filename = basename($0, ''); #ファイル名の取得
9:
10: #---接続情報の設定-----
11: $pop_server="pop.grot3.com"; #POPサーバー名の指定(サーバ名は仮定です)
12: $account="grot3"; #POPサーバー用アカウント(仮定です)
13: $password="1234567"; #POPサーバー用パスワード(仮定です)
14:
15: #-----表示内容の分岐
16: $query=$ENV{QUERY_STRING}; #URLの引数部分の取得
17: if($query eq ""){ #引数が無い場合、ヘッダー表示(0)
18: &HeaderList(0);
19: } elsif ($query =~ m/page/i){ #引数(page)がある場合、指定ページを開く
20: @args=split(/=/ , $query);
21: &HeaderList(@args[1]);
22: } elsif ($query =~ m/mailno/i){ #引数(mailno)がある場合、メール本文を開く
23: unlink (<./tmp/*>); #[./tmp]内のファイル(前回開いたメールの添付ファイル)を全て消す
24: @args=split(/=/ , $query);
25: &MailBody(@args[1]);
26: }
27:
28: #----------------------------------------------
29: #受信メール表示--(本文)
30: #----------------------------------------------
31: sub MailBody{
32: ~省略~
33: #---領域内データ処理-----
34: if($Stage eq "bbody"){
35: if($filename eq ""){
36: if($Encoding =~m/base64/i){
37: $resp64 .= $resp;
38: if(length($resp) eq 60 && $resp!=~m/=/){next;};
39: $resp = bodydecode($resp64,b64);$resp64 = "";
40: }
41: if($charset=~m/iso-2022-jp/i){$resp = jcode($resp)->mime_decode->sjis;}
42: if($charset =~m/utf-8/i){$resp = Jcode->new( $resp, "utf8")->sjis;}
43:
44: print "$resp\n"; #データが添付でない場合、そのまま画面に表示
45: }
~省略~
46: }
47:
48: #----------------------------------------------
49: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
50: #----------------------------------------------
51: sub HeaderList{
~省略~
52: }
53:
54: #----------------------------------------------
55: #接続
56: #----------------------------------------------
57: sub ConnectPop{
~省略~
58: }
59:
60: #----------------------------------------------
61: #ヘッダー処理(ヘッダー名を変数名とし、値を代入)
62: #----------------------------------------------
63: sub MailHeader{
~省略~
64: }
65:
66: #----------------------------------------------
67: #日付表示形式変更用 YYYY/MM/DD hh:mm
68: #----------------------------------------------
69: sub Date{
~省略~
70: }
メモ:
36~37行目で、base64の場合のデータを結合する。
base64の値が終わる場合、"="(イコール)が登場する。また、60桁では無い行が登場する。
38行目で、これを検索値として現れたら結合したデータをデコードする。
※通常は本文をbase64にする意味はないかと思うが、これでSMNP自動送信するシステムもあったため、追加した。