[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отправка письма с неопределённым количеством вложе
romveld
Ребята, привет! Кто шарит, подскажите пожалуйста по следующему вопросу. Мне нужно отправить письмо на почту с неопределённым изначально количеством вложений. На почту не приходят несколько файлов сразу, только один и тот, который был добавлен в инпут последним. Дело в том, что у меня не несколько файловых инпутов, а 1 и он мультифайловый. Количество файлов заранее не определено, сколько пользователь загрузит, столько и должно прийти на почту. Код следующий:

форма index.php:

<!DOCTYPE html>
<html>
<head>
<meta
charset="utf-8" />
<title>
Мультифайл</title>
</head>
<body>
<form
action="simple_mail.php" enctype="multipart/form-data" method="post">
<div>
<input
type="file" name="mail_file[]" multiple/>
</div>
<input
type="submit" value="Send"/>
</form>
</body>
</html>



обработчик simple_mail.php:

<?php
$to='login@mail.ru';
$subject = "=?utf-8?b?". base64_encode("Заявка с формы связи") ."?=";
$message ="Текст сообщения";
$filepath = $_FILES['mail_file']['name'];
$filepath_tmp = $_FILES['mail_file']['tmp_name'];
$EOL = "\r\n";
$boundary = "--".md5(uniqid(time()));
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$multipart = "Content-Type: text/html; charset=utf-8$EOL";
$multipart .= chunk_split($message);
$multipart .= "$EOL--$boundary$EOL";
if (!empty($filepath)) {
for ($i = 0; $i < count($filepath); $i++) {
copy($filepath_tmp[$i], $filepath[$i]);
$fp = fopen($filepath[$i],"rb");
$file = fread($fp, filesize($filepath[$i]));
fclose($fp);
$filename = basename($filepath[$i]);
$message_file_part = "Content-Type: application/octet-stream; name=\"$filename\"$EOL";
$message_file_part .= "Content-Transfer-Encoding: base64$EOL";
$message_file_part .= "Content-Disposition: attachment; filename=\"$filename\"$EOL";
$message_file_part .= $EOL;
$message_file_part .= chunk_split(base64_encode($file));
$message_file_part .= $EOL;
$message_file_part .= "$EOL--$boundary--$EOL";
print_r($message_file_part);
}
print_r($message_file_part);
}
$multipart .= $message_file_part;
mail($to, $subject, $multipart, $headers);
unlink($filepath);
?>

Приходит только 1 последний, загруженный в массив $_FILES, файл. Как запечатать каждый файл из $message_file_part в массив и у же массивом отослать его на почту?
print_r($message_file_part), стоящий внутри цикла, выводит все, допустим 3 файла. print_r($message_file_part), который стоит вторым, то есть вне цикла, выводит только последний (соответственно, он и приходит на почту). Я так понимаю, внутри цикла происходит наслаивание/перезапись переменной $message_file_part при каждой итерации, потому все 3 и не отправляются.
Если логика построения скрипта верна, то как сформировать массив из отправляемых файлов и прислать его на почту, чтобы в письме отобразились все отсылаемые пользователем файлы, либо как отменить перезапись переменной $message_file_part, чтобы при каждой интерации происходило не наслаивание, а добавление нового содержимого в переменную. Заранее, спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.