Отправка письма с вложением

Функция предназначена для отправки письма с сайта с вложенным файлом. Создадим HTML-форму, предназначенную для заполнения пользователем

HTML-форма index.php


<HTML> 

<HEAD> 

<TITLE>Отправка сообщения с вложением</TITLE> 

</HEAD> 

<BODY> 

<H3> <center><font color=#1E90FF>Отправка сообщения с вложением</font></H3> 

<center> 

<table width=1 border=0> 

<form action=simple_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>

Обработчик simple_mail.php HTML-формы index.php может выглядеть следующим образом

Обработчик simple_mail.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("Введите адрес в виде Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript."); 

  
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to'])); 

  
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject'])); 

  
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg'])); 

  
$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); 

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

  
function send_mail($to, $thm, $html, $path) 

  { 

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

    if (!
$fp) 

    { 

      print 
"Файл $path не может быть прочитан"; 

      exit(); 

    } 

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

    
fclose($fp); 

    

    
$boundary = "--".md5(uniqid(time())); // генерируем разделитель 

    
$headers .= "MIME-Version: 1.0\n"; 

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

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

    
$kod = 'koi8-r'; // или $kod = 'windows-1251'; 

    
$multipart .= "Content-Type: text/html; charset=$kod\n"; 

    
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 

    
$multipart .= "$html\n\n"; 



    
$message_part = "--$boundary\n"; 

    
$message_part .= "Content-Type: application/octet-stream\n"; 

    
$message_part .= "Content-Transfer-Encoding: base64\n"; 

    
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"; 

    
$message_part .= chunk_split(base64_encode($file))."\n"; 

    
$multipart .= $message_part."--$boundary--\n"; 



    if(!
mail($to, $thm, $multipart, $headers)) 

    { 

      echo 
"К сожалению, письмо не отправлено"; 

      exit(); 

    } 

  } 

?>