<?php
/***************************
 *  PHP Web Mailer MIME B  by ToR
 *
 *  http://php.s3.to
 *  php@php.4all.cc
 *  まだまだ未完成?
 *  2001/06/01
 *  2002/03/07 フッタのせいで文字化けしてた。他微修正
 *  2002/05/25 最大ファイルサイズ追加。copy→move、アップ後にサイズを見てもいいかも
 *
 * ほとんどのメーラでは日本語ファイル名をMIME Bデコード出来ます
 ***************************/
if (phpversion()>="4.1.0"){
extract($_POST);
extract($_SERVER);
$upfile_a=$_FILES["upfile"]["tmp_name"];
$upfile_a_name=$_FILES["upfile"]["name"];
$upfile_a_type=$_FILES["upfile"]["type"];
$upfile_b=$_FILES["upfile"]["tmp_name"];
$upfile_b_name=$_FILES["upfile"]["name"];
$upfile_b_type=$_FILES["upfile"]["type"];
}

function 
attachfile($upf$upf_name$filetype){    //ファイル添付
  
global $tmp,$body,$boundary;

  
//PHP4.0.2以降のみ
  
move_uploaded_file($upf$tmp.$upf_name);
  
//copy($upf, $tmp.$upf_name) or die("copy error");    //アップロードファイルをコピー

  
$fp fopen($tmp.$upf_name"r") or die("error");    //ファイル読み込む
  
$content fread($fpfilesize($tmp.$upf_name));
  
fclose($fp);
  
$fencoded chunk_split(base64_encode($content));    //エンコードして分割
  
$body .= "\n\n--$boundary\n";                //ヘッダつける
  
$body .= "Content-Type: ".$filetype.";\n";
  if(
ereg("^[[:alnum:]@!#\._-]+$"$upf_name)){        //英数字はそのままファイル名
    
$f_name $upf_name;
  }else{
    
$f_name mime_head($upf_name);            //日本語ファイル名はエンコード
  
}
  
$body .= "\tname=\"$f_name\"\n";
  
$body .= "Content-Transfer-Encoding: base64\n";
  
$body .= "Content-Disposition: attachment;\n";
  
$body .= "\tfilename=\"$f_name\"\n\n";
  
$body .= "$fencoded\n";

  
unlink($tmp.$upf_name);

  return 
$body;
}
/* original by TOMO http://www.spencernetwork.org/ */
function sjis2jis($sjis){                //SJIS→JIS変換
    
$jis '';
    
$ascii true;
    
$b unpack("C*"$sjis);
    for (
$i 1$i <= count($b); $i++) {
      if(
$b[$i] >= 0x80){
        if (
$ascii) {
          
$ascii false;
          
$jis .= chr(0x1B).'$B';
        }
        
$b[$i] <<= 1;
        if (
$b[$i+1] < 0x9F) {
          
$b[$i]   -= ($b[$i] < 0x13F) ? 0xE1 0x61;
          
$b[$i+1] -= ($b[$i+1] > 0x7E) ? 0x20 0x1F;
        } else {
          
$b[$i] -= ($b[$i] < 0x13F) ? 0xE0 0x60;
          
$b[$i+1] -= 0x7E;
        }
        
$b[$i] = $b[$i] & 0xff;
        
$jis .= pack("CC"$b[$i], $b[$i+1]);
        
$i++;
      } else {
        if (!
$ascii) {
          
$ascii true;
          
$jis .= chr(0x1B).'(B';
        }
        
$jis .= pack("C"$b[$i]);
      }
    }
    if (!
$ascii$jis .= chr(0x1B).'(B';
    
    return 
$jis;
}
function 
HANtoZEN_SJIS($str_HAN){//半角→全角
    
$table_han2zen_sjis = array(0x8142,0x8175,0x8176,0x8141,0x8145,0x8392,
    
0x8340,0x8342,0x8344,0x8346,0x8348,0x8383,0x8385,0x8387,0x8362,0x815B,
    
0x8341,0x8343,0x8345,0x8347,0x8349,0x834A,0x834C,0x834E,0x8350,0x8352,
    
0x8354,0x8356,0x8358,0x835A,0x835C,0x835E,0x8360,0x8363,0x8365,0x8367,
    
0x8369,0x836A,0x836B,0x836C,0x836D,0x836E,0x8371,0x8374,0x8377,0x837A,
    
0x837D,0x837E,0x8380,0x8381,0x8382,0x8384,0x8386,0x8388,0x8389,0x838A,
    
0x838B,0x838C,0x838D,0x838F,0x8393,0x814A,0x814B);
    
$str_ZEN '';
    
$b unpack("C*"$str_HAN);
    for(
$i 1$i <= count($b); $i++){
        if(
0xA1 <= $b[$i] && $b[$i] <= 0xDF){
            
$b[$i] -= 0xA1;
            
$c1 = ($table_han2zen_sjis[$b[$i]] & 0xff00) >> 8;
            
$c2 $table_han2zen_sjis[$b[$i]] & 0x00ff;
            
$str_ZEN .= pack("CC"$c1$c2);
        }elseif(
$b[$i] >= 0x80){
            
$str_ZEN .= pack("CC"$b[$i], $b[$i+1]);
            
$i++;
        }else{
            
$str_ZEN .= pack("C"$b[$i]);
        }
    }
    return 
$str_ZEN;
}
/*
function rfc2231($text){            //日本語ファイル名をRFC2231に添ってエンコ
  $encode = "*=iso-2022-jp'ja'";        //ヘッダ
  $text = sjis2jis($text);            //JISに変換
  for($i = 0; $i < strlen($text); $i++){
    $cc = $text[$i];                //%+ASCII文字
    $encode .= ereg("[[:alnum:]]", $cc) ? $cc : sprintf("%%%02x", ord($cc)) ;
  }
  return $encode;
}
*/
function mime_head($usr_str){            //MIMEエンコード
  
if(get_magic_quotes_gpc()) $usr_str stripslashes($usr_str);//\は取る
  
$enc sjis2jis($usr_str);            //JISに変換
  
return "=?iso-2022-jp?B?" base64_encode($enc) . "?=";    //Bヘッダ+エンコード
}

//-----------メイン
$boundary md5(uniqid(rand()));//バウンダリー文字(何でも
$tmp "./data/";        //アップファイル一時格納ディレクトリ(アップ後にファイルは削除
$myhost "php.s3.to";        //設置場所
$logfile "mailog.txt";    //送信ログファイル名
$maxbyte "200000";        //最大アップファイルバイト数
//------
// Basic認証 ログインID・PASS
$id   "admin";
$pass "pass";

if(!isset(
$_SERVER[PHP_AUTH_USER]) || !(($_SERVER[PHP_AUTH_USER] == "$id) && ($_SERVER[PHP_AUTH_PW] == "$pass"))) {
  
header('WWW-Authenticate: Basic realm="User"');
  
header('HTTP/1.0 401 Unauthorized');
  echo 
"Login Failed";
  exit;
}

if(
$submit!="" && strstr($HTTP_HOST,$myhost)) {
  
$to_err $sub_err "";
  
$froma htmlspecialchars($from);
  
$namea htmlspecialchars($name);
  if(
get_magic_quotes_gpc()) {
    
$sub stripslashes($subject);
    
$mes stripslashes($message);
  }else{
    
$sub htmlspecialchars($subject);
    
$mes htmlspecialchars($message);//エラー用に
  
}
  if(!
$from$from "root@".$HTTP_HOST;            //From空のときroot@host.com
  
if(!$to$to_err="<font color=red><b>アドレスを入れてください</b></font>";
  if(!
$subject$sub_err="<br><font color=red><b>件名を入れてください</b></font>";

  
$message HANtoZEN_SJIS($message);    //半角カナを全角に
  
$subject HANtoZEN_SJIS($subject);
  if(!
ereg("^[^@]+@[^@]+$"$to)) $to_err="<font color=red><b>アドレスが不正です</b></font>";

  if(
$to_err=="" && $sub_err==""){    //エラーが無いなら送信
    
if(preg_match("/[\x80-\xA0]/",$name)) $name mime_head($name);//日本語ならMIMEヘッド
    
$from "$name<$from>";
    if(
preg_match("/[\x80-\xA0]/",$subject)) $subjectmime_head($subject);

    
$body "";
    
$heady  "From: $from\n";        //From
    
$heady .= "Reply-To: $from\n";    //Reply-To
    
if($cc$heady .= "Cc: $cc\n";    //Cc
    
if($bcc$heady .= "Bcc: $bcc\n";    //Bcc
    
$heady .= "X-Mailer: PHP/".phpversion()."\n";
    
$heady .= "MIME-version: 1.0\n";    //MIMEヘッダ

    
if(file_exists($usrfile_a)||file_exists($usrfile_b)){
      
$heady .= "Content-Type: multipart/mixed;\n";//添付があるならマルチパートヘッダ
      
$heady .= "\tboundary=\"$boundary\"\n";
      
$body .= "This is a multi-part message in MIME format.\n\n";
      
$body .= "--$boundary\n";
      
$body .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
      
$body .= "Content-Transfer-Encoding: 7bit\n\n";
      
$flag true;
    }else{    
//普通の場合のヘッダ
      
$heady .= "Content-Type: text/plain; charset=ISO-2022-JP\n";
      
$heady .= "Content-Transfer-Encoding: 7bit\n";
    }
    
$heady .= "X-HOST: ".@gethostbyaddr($REMOTE_ADDR);    //おまけ・・

    
$message str_replace("\r\n""\n"$message);    //改行文字の統一
    
$message str_replace("\r""\n"$message);
    
$message ereg_replace("^(\n)+|(\n)+$"""$message);//連続改行を消す

    
if(preg_match("/[\x80-\xA0]/",$message)){        //本文に日本語がある場合JIS変換
      
if(get_magic_quotes_gpc()) $message stripslashes($message);
      
$body .= sjis2jis($message);
    } else {
      
$body .= $message;
    }
//----------ファイル添付
    
if(file_exists($usrfile_a)) attachfile($usrfile_a,$usrfile_a_name,$usrfile_a_type);
    if(
file_exists($usrfile_b)) attachfile($usrfile_b,$usrfile_b_name,$usrfile_b_type);
    if(
$flag$body .= "--$boundary--";

//----------ログ
    
$dat =gmdate("Y/m/d H:i:s",time()+9*3600).",".@gethostbyaddr($REMOTE_ADDR) ." ,$namea,$froma,$to,$sub,$mes,$cc,$bcc\n";
    
$lp fopen($logfile"a");
    
fputs($lp$dat);
    
fclose($lp);

    if(
mail($to$subject$body$heady)){
      echo 
"<html><body>以下の通りメールが送信されました<hr>";
      echo 
"From: $froma<br>";
      echo 
"To: $to<br>";
      echo 
"Subject: $sub<br><hr>";
      echo 
"$message</body></html>";
    }else{
      echo 
"メール送信が失敗しました";
    }
    exit;
  }
}
?>
<HTML><HEAD><TITLE>PHP Web Mailer</TITLE>
<META content="text/html; charset=Shift_JIS" http-equiv=Content-Type>
</HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=0 marginheight=0 marginwidth=0>
<center>
<FORM action="<?=$PHP_SELF;?>" encType=multipart/form-data method=post>
<INPUT type=hidden name="MAX_FILE_SIZE" value="<?=$maxbyte?>">
<BR><BR><BR>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=560>
  <TR>
    <TD align=middle bgColor=#d0ebd5 colSpan=2 height=23><b>PHP Web Mailer</b></TD></TR>
  <TR>
    <TD colSpan=2><br></TD></TR>
  <TR height=25>
    <TD align=right>Name &nbsp;</TD>
    <TD><INPUT value="<?echo $namea;?>" maxLength=200 name=name type=text size=30></TD></TR>
  <TR height=25>
    <TD align=right>From *&nbsp;</TD>
    <TD><INPUT value="<?echo $froma;?>" maxLength=200 name=from type=text size=30></TD></TR>
  <TR height=25>
    <TD align=right>To *&nbsp;</FONT></TD>
    <TD><INPUT value="<?echo htmlspecialchars($to);?>" name=to size=30><?=$to_err?></TD></TR>
  <TR height=25>
    <TD align=right>Cc &nbsp;</TD>
    <TD><INPUT value="<?echo htmlspecialchars($cc);?>" name=cc size=40></TD></TR>
  <TR height=25>
    <TD align=right>Bcc &nbsp;</TD>
    <TD><INPUT value="<?echo htmlspecialchars($bcc);?>" name=bcc size=40> </TD></TR>
  <TR height=25>
    <TD align=right>Subject <FONT color=#52370a size=1>* &nbsp;</FONT></TD>
    <TD><INPUT value="<?echo $sub;?>" name=subject size=70><?=$sub_err?> </TD></TR>
  <TR height=25>
    <TD align=right>Upload File &nbsp;</TD>
    <TD><INPUT name=usrfile_a size=54 type=file> </TD>
  </TR>
  <TR height=25>
    <TD align=right>Upload File &nbsp;</TD>
    <TD><INPUT name=usrfile_b size=54 type=file> </TD>
  </TR>
  <TR height=190>
    <TD align=middle colSpan=2><TEXTAREA class=input cols=75 name=message rows=12><?echo $mes;?></TEXTAREA></TD></TR>

  <TR height=40>
    <TD align=middle colSpan=2><INPUT type=submit name=submit value=submit> &nbsp;&nbsp; <input type=reset value=clear><BR></TD>
<tr><td colspan=2><br>
<font size=2><a href="http://php.s3.to/" target=_new>レッツPHP!</a>
</font></TD></TR></FORM></TBODY></TABLE>
</center>
</BODY></HTML>