В общем стандартная отправка сообщение с хоста без SMTP. На нескольких сайтах данный скрипт работает отлично. Ничего не меняя взял его. И пошло поехало
This is a multi-part message in MIME format.
--b1_Jw760u5PXNa6jZt6GmnvxNLWHLkxcLTV7NC9d4AwM
Content-Type: multipart/alternative;
boundary="b2_Jw760u5PXNa6jZt6GmnvxNLWHLkxcLTV7NC9d4AwM"
--b2_Jw760u5PXNa6jZt6GmnvxNLWHLkxcLTV7NC9d4AwM
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
--b2_Jw760u5PXNa6jZt6GmnvxNLWHLkxcLTV7NC9d4AwM
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
Погуглил. Ничего толкового не нашёл. Сам код отправки
$name = $_POST['username'];
$date = $_POST['date'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$title = "Заявка с сайта" . $sitename;
$msg = '';
if (!empty($message)) {
$msg = '<b>Другие сведения:</b><br>' . $message;
}
$body = "
<h2>Новый вопрос</h2>
<b>Имя:</b><br>$name<br><br>
<b>Дата рождения:</b><br>$date<br><br>
<b>Телефон:</b><br>$phone<br><br>
$msg";
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->setFrom($sitemail, $sitename);
$mail->addAddress($mymail);
$mail->CharSet = "UTF-8";
$mail->Subject = $title;
$mail->msgHTML($body);
if (!empty($_FILES)) {
for ($ct = 0; $ct < count($_FILES); $ct++) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['file-' . $ct]['name']));
$filename = $_FILES['file-' . $ct]['name'];
if (move_uploaded_file($_FILES['file-' . $ct]['tmp_name'], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
$rfile[] = "Файл $filename прикреплён";
} else {
$rfile[] = "Не удалось прикрепить файл $filename";
}
}
}
if ($mail->send()) {
$result = "success";
} else {
$result = "error";
}
echo json_encode(['result' => $result]);
isHTML разумеется никак не помогает
-
1Так в чем проблема? Что пошло-поехало? Что ожидалось? Что не так в итоге? Дополните вопросDmitry Kozlov– Dmitry Kozlov2023年01月22日 08:45:17 +00:00Commented 22 янв. 2023 в 8:45
-
Вообще скрипт должен работать по стандарту так ` $mail->isHTML(true); $mail->Subject = $title; $mail->Body = $body; ` И присылать текст + вложения, если они конечно есть. Но в таком формате он присылает body с html тегами. И вложение в base64 Через msgHTML он присылает он присылает какие типы данных есть. 1 формат html без тегов, 1 с тегами и base64 картинку но не прикрепляет файлAdelinaIbragimova– AdelinaIbragimova2023年01月22日 08:53:42 +00:00Commented 22 янв. 2023 в 8:53
2 ответа 2
В общем так и не нашёл проблему в данном коде. Видимо хостингу что-то не нравится. Отписал без библиотеки. Если кому понадобится.
$sitename = 'SiteName';
$sitemail = '[email protected]';
$name = $_POST['username'];
$date = $_POST['date'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$subject="Заявка с сайта $sitename";
$from = "$sitename <$sitemail>";
$to = '[email protected]';
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";
$msg = '';
if (!empty($message)) {
$msg = '<b>Другие сведения:</b><br>' . $message;
}
$body = "
<h2>Новый вопрос</h2>
<b>Имя:</b><br>$name<br><br>
<b>Дата рождения:</b><br>$date<br><br>
<b>Телефон:</b><br>$phone<br><br>
$msg";
$multipart = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$body . "\n\n";
$fileinfo = '';
if (!empty($_FILES)) {
foreach ($_FILES as $userfile) {
$tmp_name = $userfile['tmp_name'];
$type = $userfile['type'];
$name = $userfile['name'];
$size = $userfile['size'];
$fileinfo = $type . '|' . $name . '|' . $size;
if (file_exists($tmp_name)) {
if (is_uploaded_file($tmp_name)) {
$file = fopen($tmp_name, 'rb');
$data = fread($file, filesize($tmp_name));
fclose($file);
$data = chunk_split(base64_encode($data));
}
$multipart .= "--{$mime_boundary}\n" .
"Content-Type: {$type};\n" .
" name=\"{$name}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n";
}
}
}
$multipart.="--{$mime_boundary}--\n";
if (@mail($to, $subject, $multipart, $headers)) {
$result = "success";
} else {
$result = "error";
}
echo json_encode(['result' => $result]);
ответ дан 22 янв. 2023 в 13:46
AdelinaIbragimova
112 бронзовых знака
Нужно обновить phpmailer До 6.х версии и проблема уйдет. Связано с поддержкой PHP 8.0.
Скачать последнюю версию можно тут https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php
ответ дан 31 июл. 2023 в 13:28
Константин Колясников
11 бронзовый знак
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросИзучите связанные вопросы
Посмотрите похожие вопросы с этими метками.
default