0

В общем стандартная отправка сообщение с хоста без 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 разумеется никак не помогает

задан 22 янв. 2023 в 8:02
2
  • 1
    Так в чем проблема? Что пошло-поехало? Что ожидалось? Что не так в итоге? Дополните вопрос Commented 22 янв. 2023 в 8:45
  • Вообще скрипт должен работать по стандарту так ` $mail->isHTML(true); $mail->Subject = $title; $mail->Body = $body; ` И присылать текст + вложения, если они конечно есть. Но в таком формате он присылает body с html тегами. И вложение в base64 Через msgHTML он присылает он присылает какие типы данных есть. 1 формат html без тегов, 1 с тегами и base64 картинку но не прикрепляет файл Commented 22 янв. 2023 в 8:53

2 ответа 2

0

В общем так и не нашёл проблему в данном коде. Видимо хостингу что-то не нравится. Отписал без библиотеки. Если кому понадобится.

 $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
0

Нужно обновить phpmailer До 6.х версии и проблема уйдет. Связано с поддержкой PHP 8.0.

Скачать последнюю версию можно тут https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.