[PHP-users 9834] Re: 添付メール送信に関して

Akinobu YAMAMOTO php-users@php.gr.jp
Fri, 06 Sep 2002 14:01:21 +0900


どうも、山本です。

ご推奨いただいた「PHP実践のツボ」を購入し、その本を元に
メールフォームから添付ファイルをサーバにUploadしてから送信するように
カスタマイズしましたが、どうしてもSubjectが文字化けいたします。
とりあえずソースを公開いたしますので、ご指導・ご鞭撻のほど
お願いいたします。

Filename: attach_mail.php
----------------------------------------------------
<?php
$attach = "";
$input_url=getenv("HTTP_REFERER");
$boundary = "simple boundary";

print "<HTML>\n";
print "<BODY>\n";

if ($email == ""){
         print "<TITLE>Input Error</TITLE>\n";
         print "<CENTER><H1>Please input Mail Address.</H1>\n";
         print "<p><hr>\n";
         print "Push Back Button.<P>\n";
         print "</CENTER></BODY>\n";
         print "</HTML>\n";
         exit;
}
//↑送信元E-mail未入力の場合はエラー処理を行う

if ($tomail == ""){
         print "<TITLE>Input Error</TITLE>\n";
         print "<CENTER><H1>Please input Mail Address.</H1>\n";
         print "<p><hr>\n";
         print "Push Back Button.<P>\n";
         print "</CENTER></BODY>\n";
         print "</HTML>\n";
         exit;
}
//↑送信先E-mail未入力の場合はエラー処理を行う

if (!(ereg("([0-9A-Za-z._-])(@)([0-9A-Za-z._-])",$email))){
         print "<TITLE>Input Error</TITLE>\n";
         print "<CENTER><H1>Please input correct Mail address.</H1>\n";
         print "<p><hr>\n";
         print "Push Back Button.<P>\n";
         print "</CENTER></BODY>\n";
         print "</HTML>\n";
         exit;
}
//↑不正な送信元E-mail入力の場合はエラー処理を行う

if (!(ereg("([0-9A-Za-z._-])(@)([0-9A-Za-z._-])",$tomail))){
         print "<TITLE>Input Error</TITLE>\n";
         print "<CENTER><H1>Please input correct Mail address.</H1>\n";
         print "<p><hr>\n";
         print "Push Back Button.<P>\n";
         print "</CENTER></BODY>\n";
         print "</HTML>\n";
         exit;
}
//↑不正な送信先E-mail入力の場合はエラー処理を行う

if ($body == ""){
         print "<TITLE>Input Error</TITLE>\n";
         print "<CENTER><H1>Please input comment.</H1>\n";
         print "<p><hr>\n";
         print "Push Back Button.<P>\n";
         print "</CENTER>\n";
         exit;
}
//↑コメント未入力の場合はエラー処理を行う

$sub = stripcslashes($sub);
$sub = mb_encode_mimeheader($sub);
$body = stripcslashes($body);

$header = <<< EOD
Mime-Version: 1.0
Content-type: multipart/mixed; boundary="$boundary"
From: $email

EOD;

$msg = "This is a MIME encoded message.\n\n";
$msg = $msg . "--" . $boundary . "\n";
$msg = $msg . "Content-type: text/plain; charset=\"ISO-2022-JP\"\n";
$msg = $msg . "Content-Transfer-Encoding: 7bit\n\n";
$msg = $msg . $body . "\n\n";

if ($userfile_name != ""){
         $n = mbstrrpos($userfile_name, "\\");
         if($n){
                 $filename = mbsubstr($userfile_name, $n + 1);
         }else{
                 $filename = $userfile_name;
         }

         if ($filename != ""){
                 $copyfile = "/home/hoge/data/upload/" . $filename;
                 copy($userfile,$copyfile);

                 $fp = fopen($copyfile,"r");
                 while(!feof($fp)){
                         $attach = $attach . fgetc($fp);
                 }
                 fclose($fp);

                 $attach = chunk_split(base64_encode($attach));

                 $msg = $msg . "--" . $boundary . "\n";
                 $msg = $meg . "Content-type: application/octet-stream; name=\"$filename\"\n";
                 $msg = $msg . "Content-Type: Content-Transfer-Encoding:Base64\n\n";
                 $msg = $msg . $attach . "\n\n";

                 unlink($copyfile);
         }
}
//↑attachファイルが入力された場合に処理を行う。

$msg = $msg . "--" . $boundary . "\n";

mail($tomail,$sub,$msg,$header);

print "<TITLE>メール送信終了</TITLE>\n";
print "<P>\n";
print "<CENTER>\n";
print "<H3>メール送信を終了しました。</H3><P>\n";
print "<p><hr>\n";
print "<A HREF=\"$input_url\">[Back]</A>\n";
print "</CENTER></BODY></HTML>\n";
?>
----------------------------------------------------

------------------------------------------------
Akinobu YAMAMOTO
ayamamot@freeshop.co.jp

総合無料情報  FreeShop
http://www.freeshop.co.jp/
------------------------------------------------
本発言は特に明記がない限り、私山本の個人的なもので、
所属組織(freeshop.co.jp)には関係有りません。