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

Функция предназначена для отправки письма с сайта с вложенным файлом и разработана участниками нашего форума Trianon и elenaki во время совместного обсуждения. Создадим 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("Введите адрес в виде 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 = "rn"; // ограничитель строк, некоторые почтовые сервера требуют 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-1251$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;  

  }

?>




Рекомендуем почитать

 

Добавить комментарий


Ваше имя:


Комментарий:


Введите: Картинка