Не отправляется письмо на почту, когда начинаю перебирать массив из товаров
Есть корзина с товарами. При нажатии на кнопку "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>";
}"
";
В чем ошибка, подскажите пожалуйста)))
Источник: Stack Overflow на русском