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

Отправка файлов на почту. Почему на сервер грузятся, а на почту к письму не прикрепляются?

Добрый день!
Подскажите люди добрые!
Файл загружается на сервер - все норм. Но встал вопрос отправки этих файлов на почту.
Добавил код отправки (который работал при отправке одного файла), на сервер все грузится, но на почту письмо приходит без файлов.
Подскажите пожалуйста, не очень силен в этом вопросе

Вот код
<?php

if( isset( $_POST['my_file_upload'] ) ){
	// ВАЖНО! тут должны быть все проверки безопасности передавемых файлов и вывести ошибки если нужно

	$uploaddir = './uploads'; // . - текущая папка где находится submit.php

	// cоздадим папку если её нет
	if( ! is_dir( $uploaddir ) ) mkdir( $uploaddir, 0777 );

	$files      = $_FILES; // полученные файлы
	$done_files = array();

	// переместим файлы из временной директории в указанную
	foreach( $files as $file ){
		$file_name = $file['name'];

		if( move_uploaded_file( $file['tmp_name'], "$uploaddir/$file_name" ) ){
			$done_files[] = realpath( "$uploaddir/$file_name" );
		}
	}

	$data = $done_files ? array('files' => $done_files ) : array('error' => 'Ошибка загрузки файлов.');

	
	$thm = 'Файл';

  $msg = "Файл";

  $mail_to = 'email@gmail.com';

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

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

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

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

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

  { 

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

    if (!$fp) 

    { 

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

      exit(); 

    } 

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

    fclose($fp); 

    

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

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

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

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

    $kod = 'utf-8'; // или $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 = \"".$done_files."\"\n\n"; 

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

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



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

    { 

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

      exit(); 

    } 

  } 
	
	die( json_encode( $data ) );
	
	
}
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
судя по коду $done_files это массив, а в функции send_mail работаете с ним как со строкой. почему?
Ответ написан
Комментировать
zoozag
@zoozag
Opencart
К чему тут тег Opencart?
Если вы это делаете и правда в Opencart, там подключен класс для отправки писем. Cмотрите system/library/mail
В нем есть метод для прикрепления файлов к письму function addAttachment($filename)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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