Отправка email с двумя вложенными файлами

nipopadyuk

Постоялец
Регистрация
3 Авг 2010
Сообщения
52
Реакции
3
Доброго дня. Имеется вот такой файлик, на который идет обращение с формы. Все прекрасно работает, форма отправляется, аттач то же.
Появилась очень жесткая необходимость отправлять в одном письме сразу 2 аттача, на сайте появился еще один input type=file в который будут прикладывать помимо картинки, вордовский документ.
В php довольно слаб, помогите пожалуйста подправить скрипт, для возможности отправлять два файла через два поля input type=file
PHP:
<head>

    <meta charset="utf-8">
<body>

<?php
$to = 'r_______a@mail.ru';

$_POST['sendMail'];
  $name  = substr( $_POST['name'], 0, 64 );
  $tel = substr( $_POST['tel'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
  $zayav = substr( $_POST['zayav'], 0, 200 );
       echo 'Ваше сообщение отравлено и будет рассмотрено в ближайшее время.<a href="#" onclick="history.back();return false;">Назад</a>';

   
  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }

  $body = "Акция:\r\n".$zayav."\r\n\r\n";
  $body .= "Имя:\r\n".$name."\r\n\r\n";
  $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
  $body .= "E-mail:\r\n".$email."\r\n\r\n";
  $body .= "Описание заказа:\r\n".$message;

  send_mail($to, $body, $email, $filepath, $filename);
 

 
$filename = 'somefile.txt';
$text = $to.$body.$email.$filepath.$filename;
//записываем текст в файл
file_put_contents($filename, $text);





// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $body, $email, $filepath, $filename)
{
  $subject = 'Заказ на сайте ';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".$email."\r\n";   
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = $body."\r\n\r\n";
  $multipart .= $body;
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";
    mail($to, $subject, $multipart, $headers);
   

   
}
?>
</head>
</body>
 
  • Заблокирован
  • #2
Допустим новое поле будет называться name2, тогда надо изменить
тут, добавив
PHP:
if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }

if ( !empty( $_FILES['file']['tmp_name2'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath2 = $_FILES['file']['tmp_name2'];
    $filename2 = $_FILES['file']['name2'];
  } else {
    $filepath2 = '';
    $filename2 = '';
  }

и тут поменять
PHP:
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $body, $email, $filepath, $filename, $filepath2, $filename2)
{
  $subject = 'Заказ на сайте ';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".$email."\r\n";   
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = $body."\r\n\r\n";
  $multipart .= $body;
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  //загрузка второго файла
  if ( !empty( $filepath2 ) ) {
    $fp = fopen($filepath2, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath2));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename2."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";
    mail($to, $subject, $multipart, $headers);
}
 
а новый разделитель не нужно объявить перед вторым аттачем?
Код:
$boundary = "--".md5(uniqid(time())); // генерируем разделитель
 
  • Заблокирован
  • #4
нет, тогда бы его не делали переменной, а постоянно бы генерировали новый
 
нет, тогда бы его не делали переменной, а постоянно бы генерировали новый
посмотрел сейчас исходник письма, да, одинаковый разделитель
НО - он должен повторяться после каждого аттача
 
Скока накрутчиков постов то собралось....
2Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся - работаю с тем, с чем мне комфортно работать.

Допустим новое поле будет называться name2, тогда надо изменить
тут, добавив


У меня первое поле было под названием "file", допустим второе поле назовем file2
Может так правильнее? хотя это тока догадки, могу быть не прав.
Код:
 if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }

if ( !empty( $_FILES['file2']['tmp_name2'] ) and $_FILES['file2']['error'] == 0 ) {
    $filepath2 = $_FILES['file2']['tmp_name2'];
    $filename2 = $_FILES['file2']['name2'];
  } else {
    $filepath2 = '';
    $filename2 = '';
  }
 
Последнее редактирование модератором:
у него там как раз опечатка
нужно писать не $_FILES['file']['tmp_name2'] а $_FILES['file2']['tmp_name']
 
Назад
Сверху