Отправлять файлы с помощью phpmailer перед их загрузкой?
У меня есть проблема с отправкой писем с вложением скриптом phpmailer. У меня есть рабочий код, если я хочу добавить один файл к почте. Но когда речь заходит о нескольких файлах, кажется, что они даже не загружены.
Мой код для одного файла:
if (isset($_FILES['file']) &&
$_FILES['file']['error'] == UPLOAD_ERR_OK)
{
$mail->AddAttachment($_FILES['file']['tmp_name'],
$_FILES['file']['name']);
if(!$mail->Send())
{
header("Location: " . $returnErrorPage);
}
else
{
header("Location: " . $returnHomePage);
}
}
Я попробовал несколько кодов, которые должны перебирать все файлы в $_FILES, но безуспешно. Затем я проверил следующий код:
$count = count($_FILES['file']['tmp_name']);
echo $count;
Возвращает 0. Я знаю, что $_FILES пуст, но я не знаю вот в чем причина. Мне нужно буферизировать файлы или что-то в этом роде?
Править: вот мой html-код, который отправил файлы и другие данные в скрипт:
<form id="form_907007" class="appnitro" method="post" action="server/phpmailer.php"
enctype="multipart/form-data">
<p>Choose data (txt, html etc.):<br>
<input name="file" type="file" size="50" maxlength="100000" multiple>
</p>
</form>
1 ответ:
Решение моей проблемы основано на идее из Synchro, сначала загрузите файлы, а затем отправьте электронное письмо.
В моем html-коде я должен был изменить эту строку:
<input name="file" type="file" size="50" maxlength="100000" multiple> <input name="file[]" type="file" size="50" maxlength="100000" multiple>
Важно сделать этот маленький шаг, чтобы добраться до каждого файла, который вы хотите загрузить позже в php.
Второй шаг-перебрать все файлы и сохранить их на вашем сервере. Вот как я это сделал:
foreach ($_FILES["file"]["error"] as $key => $error){ if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["file"]["tmp_name"][$key]; $name = $_FILES["file"]["name"][$key]; move_uploaded_file($tmp_name," server/data/$name"}
На следующем шаге я проверяю, успешно ли загружены файлы, если return = TRUE, я добавляю их как приложение к почте:
if(move_uploaded_file($tmp_name,"server/data/$name" )) { $mail->AddAttachment("server/data/$name"); }
Если все прошло хорошо, я могу удалить файлы после того, как я отправил письмо:
if($mail->Send()){ foreach ($_FILES["file"]["error"] as $key => $error) { $name = $_FILES["file"]["name"][$key]; unlink("$name"); } header("Location: " . $returnPage); exit;}
Спасибо за вашу помощь!