Добрый день!
Есть задача, передать загруженный файл из формы на почту. Проблема - данные с других полей приходят на почту, а сам файл - нет.
—---------------
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);
}