実際に先ほどの画像データをBase64でエンコードしてみます
その前に read関数の説明をば。
readは、ファイルハンドルからデータを読み取ります。
第1引数のファイルハンドルから第2引数の変数に
第3引数のバイト数分のデータを読み込みます
read [ FILEHANDLE ] , [ 受取らせる変数 ] , [ バイト数 ] ;
read(FILE, $buf, 60*57)として $bufをBase64でエンコード
この フォームに画像ファイルを添付すると
す、すると こんな無残なデータに画像が変換されてしまった・・・・
フォームは mail10.cgi とします
CSSは いつもの'form.css'を 付けてください
#!/usr/bin/perl use CGI; $q = new CGI; print $q->header(-charset => 'utf-8'), $q->start_html(-title=>"Example CGI.pm Form", -style=>{'src'=>'form.css'}), $q->h1(' Example CGI.pm Form'), $q->start_div({-class=>"aaa"}), $q->p('これは class="aaa" の部分です'), $q->start_multipart_form(-action=>"mail11.cgi"), $q->em("What's your name?"), $q->br, $q->br, $q->textfield('name'), $q->checkbox('Not my real name'), $q->br, $q->em("What's your e-mail?"), $q->br, $q->br, $q->textfield('email'), $q->br, $q->em("What's your subject?"), $q->br, $q->br, $q->textfield('subject'), $q->br, $q->em('Any parting comments?'), $q->br, $q->br, $q->textarea(-name=>'comments',-rows=>3,-columns=>50), $q->br, $q->br, $q->filefield(-name=>'uploaded_file', -default=>'starting value', -size=>50, -maxlength=>80), $q->reset, $q->submit(-name =>'Action', -value =>'送信'), $q->submit(-name =>'Action', -value =>'Scream'), $q->end_multipart_form, $q->end_div, $q->start_div({-id=>"bbb"}), $q->h3('これは id="bbb" の部分です'), $q->end_div, $q->start_div({-class=>"ccc"}), $q->h3('これは class="ccc" の部分です'), $q->end_div, $q->end_html;
ファイルネーム、ファイルハンドル,Base64された結果を出すスクリプトを
mail11.cgi とします
#!/usr/bin/perl use CGI; use Jcode; use MIME::Base64; my $q = CGI->new(); $name= $q->param('name'); $email= $q->param('email'); $subject= $q->param('subject'); $comments= $q->param('comments'); $mailto='trinity777@yahow.co.jp'; # ファイルネーム取得 my $filename = $q->param('uploaded_file'); my $fh = $q->upload('uploaded_file'); binmode $fh; my $data =''; while (read $fh,$buf,60*57){$data.=$buf;} close $fh; #バイナリデータをBASE64することでメール添付するためのASCIIテキストにする $base64filebody = encode_base64($data,''); print $q->header(-charset => 'utf-8'), $q->start_html('Mail Form'), $q->h1("ファイルネーム$filename"), $q->h2("ファイルハンドル$fh"), $q->p($base64filebody), $q->end_html;