Задать вопрос

Как отправить несколько вложений PHP mail?

Добрый день, есть скрипт, который отправляет 1 файл на почту, как можно отправить например 2 файла?
Названия файлов известны, их будет всего 2.

/**
* Функция отправки письма с вложением
*
**/
function sendFile($head, $message, $imail, $filepath){

  $fp = fopen($filepath,"r"); 
  if (!$fp) {
    echo ("Не удается открыть файл"); 
    exit; 
  } 

  $filename = basename($filepath);

  $file = fread($fp, filesize($filepath)); 
  fclose($fp); 
  // чтение файла

  $boundary = "--".md5(uniqid(time())); // генерируем разделитель 
  $headers .= "MIME-Version: 1.0\n"; 
  $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; 
  $headers .= 'From: ' . 'info@pks38.ru';
  $multipart .= "--$boundary\n"; 
  $multipart .= "Content-Type: text/html; charset=utf-8\n"; 
  $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"; 
  $multipart .= "$message\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 = \"".$filename."\"\n\n"; 
  $message_part .= chunk_split(base64_encode($file))."\n"; 
  $multipart .= $message_part."--$boundary--\n"; 

  mail($imail, $head, $multipart, $headers);
} // конец функции


  $header = 'Content-type: text/plain; charset=UTF-8' . PHP_EOL . 
            'From: ' . 'info@alliance-strateg.ru' . PHP_EOL . 
            'MIME-Version: 1.0'. PHP_EOL;

  $title = 'Ваш чек-лист и презентация - ' . $_SERVER['HTTP_HOST'];
  $message ='Здравствуйте!<br/> <br/> чек-лист и презентация находится во вложении';
  $sendfile = true;
  $filepath = 'Check-list.docx';



  // сейчас всего 1 файл
  $filepath = 'Check-list.docx';


  sendFile($title, $message, $_POST['email'], $filepath);
  • Вопрос задан
  • 1071 просмотр
Подписаться 2 Средний Комментировать
Решения вопроса 2
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
Повторять этот фрагмент кода несколько раз для каждого отдельного файла:
$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 = \"".$filename."\"\n\n"; 
  $message_part .= chunk_split(base64_encode($file))."\n";

А ещё лучше - вынести в отдельную функцию. Ну или воспользоваться уже готовым PhpMailer, как выше посоветовали, и не изобретать свой велосипед.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Три простых шага для решения данной проблемы:

1. Посмотреть на календарь и уточнить, какой сейчас век на дворе.
2. Аккуратно выделить этот код, и нажать клавишу Del
3. Скачать phpmailer
4. Забыть все эти кустарные ковыряния как страшный сон.

В итоге код должен получиться примерно таким:

require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->setFrom('from@example.com', 'First Last');
$mail->addAddress('whoto@example.com', 'John Doe');
$mail->Subject = 'PHPMailer file sender';
$mail->msgHTML("My message body");
// Attach uploaded files
$mail->addAttachment($filename1);
$mail->addAttachment($filename2);
$r = $mail->send();

следует понимать, что отправка почты - это не просто копирование в свой скрипт каких-то определенных сочетаний символов, которые случайно сработали в прошлом веке у автора какой-либо допотопной статьи. Это гораздо более сложный процесс, который включает множество нюансов. И поэтому отправку почты надо не лепить вручную на ходу из навоза и палок, а доверить проверенному и отлаженному решению.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы