Показать сообщение отдельно

  #3  
Старый 16.04.2008, 02:37
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами: 10248806

Репутация: 2371


По умолчанию

index.php

PHP код:
<HTML> 
<
HEAD> 
<
TITLE>Отправка сообщения с вложением</TITLE> 
</
HEAD> 
<
BODY> 
<
H3> <center><font color=#1E90FF>Отправка сообщения с вложением</font></H3> 
<center> 
<
table width=1 border=0> 
<
form action='mail.php' enctype='multipart/form-data' method='post'>
<
tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr> 
<
tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr> 
<
tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td> 
<
tr><td width=50%>Photo:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr> 
</
tr><tr><td colspan=2><input type=submit value='Отправить'></td></tr> 
</
form> 
</
table> 
</
center> 
</
BODY> 
</
HTML> 
mail.php

PHP код:
<?php 

  
if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 

  
// проверяем правильности заполнения с помощью регулярного выражения 

  
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com"); 

  
$picture = ""; 

  
// Если поле выбора вложения не пустое - закачиваем его на сервер 

  
if (!empty($_FILES['mail_file']['tmp_name'])) 

  { 

    
// Закачиваем файл 

    
$path = $_FILES['mail_file']['name']; 

    if (
copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path; 

  } 

  
$thm = $_POST['mail_subject'];

  
$msg = $_POST['mail_msg'];

  
$mail_to = $_POST['mail_to'];

  
// Отправляем почтовое сообщение 

  
if(empty($picture)) mail($mail_to, $thm, $msg); 

  else 
send_mail($mail_to, $thm, $msg, $picture); 

  
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)

  
function send_mail($mail_to, $thema, $html, $path)   

  { if (
$path) {  

    
$fp = fopen($path,"rb");   

    if (!
$fp)   

    { print 
"Cannot open file";   

      exit();   

    }   

    
$file = fread($fp, filesize($path));   

    
fclose($fp);   

    }  

    
$name = "file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)  

    
$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём

    
$boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  

    
$headers    = "MIME-Version: 1.0;$EOL";   

    
$headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  

    
$headers   .= "From: address@server.com";  

      

    
$multipart  = "--$boundary$EOL";   

    
$multipart .= "Content-Type: text/html; charset=windows-1253$EOL";   

    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   

    
$multipart .= $EOL; // раздел между заголовками и телом html-части 

    
$multipart .= chunk_split(base64_encode($html));   



    
$multipart .=  "$EOL--$boundary$EOL";   

    
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   

    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   

    
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   

    
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 

    
$multipart .= chunk_split(base64_encode($file));   



    
$multipart .= "$EOL--$boundary--$EOL";   

      

        if(!
mail($mail_to, $thema, $multipart, $headers))   

         {return 
False;           //если не письмо не отправлено

      
}  

    else { 
//// если письмо отправлено

    
return True;  

    }  

  exit;  

  }

?>
 
Ответить с цитированием