Не отправляется письмо на почту, когда начинаю перебирать массив из товаров

Рейтинг: -2Ответов: 1Опубликовано: 01.02.2023

Есть корзина с товарами. При нажатии на кнопку "Apply" запускается js скрипт:

function pushOrder(){
//Проверка есть ли в корзине товары
if(document.querySelector('.TotalPrice').textContent == ""){                        //Если товаров нет, выводим сообщение о том, что нужно что-то выбрать
    alert("Ваша корзина пуста. Выберите товары и тогда можете сделать заказ.");
    return;
}else {                                                                             //Если товары в корзине есть, получаем все выбранные пользователем товары в массив
    let fullProducts = JSON.parse(localStorage.getItem("products"));                //Массив с товарами
    let name = document.querySelector('.YourName-input').value;                     //Имя клиента
    let phone = document.querySelector('.YourNum-input').value;                     //Телефон клиента
    let products = [];
    for(let i=0; i<fullProducts.length;i++){                                        //Перебераем массив, чтоб получить только название товара и его кол-во
        products.push({"name":fullProducts[i].name, "count":fullProducts[i].count});
    }console.log(products);
    $.ajax({
        url:'../SmileFood/Style/sendmail.php',
        type: 'POST',
        cache: false,
        data: {products,name,phone}
    })
    alert("Ваш заказ успешно отправлен!");
    localStorage.removeItem('products');
    localStorage.removeItem('amountGoods');
    location.reload();
}

} Скрипт достает и считает что мне нужно и отправляет массив из товаров в php скрипт, который выглядит так:

<?php// Файлы phpmailer
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
require 'phpmailer/src/Exception.php';

// Переменные, которые отправляет пользователь
$name = $_POST['name'];
$phone = $_POST['phone'];
$products = $_POST['products'];

// Формирование самого письма
$title = "Поступил новый заказ!";
$body = "
<h1>Имя: $name</h1><h1>Номер телефона: $phone</h1>
<h2>Заказ:</h2><br>
"foreach ($products as $value) {
    echo "$value<br>";
}"
";

// Настройки PHPMailer
$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
    $mail->isSMTP();   
    $mail->CharSet = "UTF-8";
    $mail->SMTPAuth   = true;
    /*$mail->SMTPDebug = 2;*/
    $mail->Debugoutput = function($str, $level) {$GLOBALS['status'][] = $str;};

    // Настройки вашей почты
    $mail->Host       = 'smtp.gmail.com'; // SMTP сервера вашей почты
    $mail->Username   = '***'; // Логин на почте
    $mail->Password   = '***'; // Пароль на почте
    $mail->SMTPSecure = 'ssl';
    $mail->Port       = 465;
    $mail->setFrom('***', 'SmileOrder'); // Адрес самой почты и имя отправителя

    // Получатель письма
    $mail->addAddress('***');  
    $mail->addAddress('***'); // Ещё один, если нужен

// Отправка сообщения
$mail->isHTML(true);
$mail->Subject = $title;
$mail->Body = $body;    

// Проверяем отравленность сообщения
if ($mail->send()) {$result = "success";} 
else {$result = "error";}

} catch (Exception $e) {
    $result = "error";
    $status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}

// Отображение результата
echo json_encode(["result" => $result, "resultfile" => $rfile, "status" => $status]);

?>

Когда из этой части кода в php я убираю foreach, письмо приходит на почту, но мне нужно перебрать массив товаров и вывести каждый товар отдельно. В чем ошибка, подскажите пожалуйста)))

$body = "
<h1>Имя: $name</h1><h1>Номер телефона: $phone</h1>
<h2>Заказ:</h2><br>
"foreach ($products as $value) {
    echo "$value<br>";
}"
";

В чем ошибка, подскажите пожалуйста)))

Ответы

▲ 1Принят

Ошибка в том что вы не знаете языка PHP. Судя по всему взяли какой-то готовый пример и скопипастили его. А потом внесли в него изменения, которые неправильные и нелогичные в общем-то.

Ваш фрагмент кода должен выглядеть:


$body = "
<h1>Имя: $name</h1><h1>Номер телефона: $phone</h1>
<h2>Заказ:</h2><br>
";

foreach ($products as $value) {
    $body .= "$value<br>";
}

Как-то вот так. Т.е. вероятней всего у вас были синтаксические ошибки.