Люди добрые, гуру php помогите девушке. Бьюсь 4-ый день над проблемой. Имеется самописная форма, с формы все данные отправляются на мыло. Все то хорошо, но столкнулась с проблемой, при прикреплении нескольких файлов на почту приходит только один, сделала цикл, mail вне цикла, все равно приходит один файл, если саму функцию mail переношу в цикл, то при отправке например 4-ех файлов, приходит 4 письма и в каждом письме отдельный файл, как собрать все это воедино. Из за проверки while ($i <= 3) письма приходят только тогда когда вложений 3 и более. Я думаю нужно как то вместо цифры вставить переменную в которой будет храниться число прикрепленных файлов.
Ну а основной вопрос это как в $multipart добавить все прикрепленные файлы чтобы они пришли в одном письме.
Вот форму переместила в отдельный файл, все лишнее вырезала, проверки итд, чтобы не было куча кода.
Ссылка на форму
Заранее спасибо.
<input class="upload-link__inp" name="mail_file[]" type="file" multiple/>
function sendMail($mailTo, $title, $html, $file)
{
if (empty($file)) { // если файла нет, то отправляем обычно письмо
$headers = "From: Robot\r\n";
$headers .= "MIME-Version: 1.0;\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
mail($mailTo, $title, $html, $headers);
} else { // если есть вложение к почте, то изобретаем велосипед :)
$i = 0;
while ($i <= 3){
$fp = fopen($file["tmp_name"][$i], "rb");
if (!$fp) {
echo "Cannot open file";
exit();
}
$data = fread($fp, filesize($file["tmp_name"][$i]));
fclose($fp);
$name = $file["name"][$i];
$boundary = "--" . md5(uniqid(time()));
$headers = "MIME-Version: 1.0;\r\n";
$headers .= "From: Robot\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$multipart = "--$boundary\r\n";
$multipart .= "Content-Type: text/html; charset=UTF-8\r\n";
$multipart .= "Content-Transfer-Encoding: base64\r\n";
$multipart .= "\r\n";
$multipart .= chunk_split(base64_encode($html));
$multipart .= "\r\n\r\n--$boundary\r\n";
$multipart .= "Content-Type: " . $file["type"][$i] . "; name=\"$name\"\r\n";
$multipart .= "Content-Transfer-Encoding: base64 \r\n";
$multipart .= "Content-Disposition: attachment; filename=\"$name\"\r\n";
$multipart .= "\r\n";
$multipart .= chunk_split(base64_encode($data));
$multipart .= "\r\n--$boundary--\r\n";
$i++;
}
mail($mailTo, $title, $multipart, $headers);
}
}
if (!empty($_FILES["mail_file"])) {
$file = array();
$file = $_FILES["mail_file"];
}
sendMail($mailTo, $title, $html, $file);