Как передать загружаемый файл на почту?

Добрый день!
Есть задача, передать загруженный файл из формы на почту. Проблема - данные с других полей приходят на почту, а сам файл - нет.
—---------------
https://codepen.io/Lia_na5/pen/zpemGd (JS)
php код ниже
—------------------
Описание:
у меня есть несколько полей + поле файла
Данные с других полей передаются, нагуглила про метод formData (https://developer.mozilla.org/ru/docs/Web/API/Form... , https://coderwall.com/p/p-n7eq/file-uploads-with-j... , https://proverstka.com.ua/blog/skript-formy-obratn...) - и пока не получается вставить в готовый дж и пхп строчки, чтобы и файл передавался. В джс там была реализация через аякс запрос.
—------------—
Вопрос: как правильно внести изменения в JS и в php-файлы, чтобы данные передавались со всех полей включая прикрепленный файл?
----------------

$method = $_SERVER['REQUEST_METHOD'];

//Script Foreach
$c = true;
if ( $method === 'POST' ) {

	$project_name = trim($_POST["project_name"]);
	$admin_email  = trim($_POST["admin_email"]);
	$form_subject = trim($_POST["form_subject"]);

	foreach ( $_POST as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
} else if ( $method === 'GET' ) {

	$project_name = trim($_GET["project_name"]);
	$admin_email  = trim($_GET["admin_email"]);
	$form_subject = trim($_GET["form_subject"]);

	foreach ( $_GET as $key => $value ) {
		if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
			$message .= "
			" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
				<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
				<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
			</tr>
			";
		}
	}
}

$message = "<table style='width: 100%;'>$message</table>";

function adopt($text) {
	return '=?UTF-8?B?'.Base64_encode($text).'?=';
}
  
if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
	$filepath = $_FILES['file']['tmp_name'];
	$filename = $_FILES['file']['name'];
  } else {
	$filepath = '';
	$filename = '';
  };



send_mail($admin_email, $message, $filepath, $filename);


  
  
  
  // Вспомогательная функция для отправки почтового сообщения с вложением
  function send_mail($admin_email, $message, $filepath, $filename)
  {
	$form_subject = trim($_POST["form_subject"]);
	$boundary = "--".md5(uniqid(time())); // генерируем разделитель
	$headers = "MIME-Version: 1.0" . PHP_EOL .
	"Content-Type: text/html; charset=utf-8" . PHP_EOL .
	'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
	'Reply-To: '.$admin_email.'' . PHP_EOL;

	$multipart = "--".$boundary."\r\n";
	$multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
	$multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
	
	function adopt($text) {
		return '=?UTF-8?B?'.Base64_encode($text).'?=';
	}
	
	$message = $message."\r\n\r\n";
   
	$multipart .= $message;
   
	$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($admin_email, adopt($form_subject), $multipart, $headers);
  }
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы