Как объеденить все письма для одного пользователя в одно, но ссылками на каждый заказ
Как бы рабочий код, но письмо приходит на каждый заказ отдельно, даже одного пользователя, а есть такие у которых больше 100, что в этом коде можно исправить, чтобы в одном письме прикреплялись все ссылки на заказы одного пользователя ?
<?
require_once '../PHPMailer-master/PHPMailerAutoload.php';
$query = "SELECT * FROM book WHERE
id_akk > 0 AND
(data1 - INTERVAL 1 DAY > NOW()) AND
(data1 - INTERVAL 2 DAY < NOW())";
// Результат = запрос на доске
$result = mysqli_query($link,$query);
// Получить массив адресов электронной почты и имен пользователей.
while($row = $result->fetch_array())
{
// Создать НОВОЕ электронное письмо
$email = new PHPMailer;
// Установите настройки электронной почты
//$email->isSMTP();
$email->Host = "ssl://localhost";
$email->SMTPAuth = true;
$email->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
$email->Port = 25;
$email->SMTPSecure = 'SSL';
$email->Username = "figyra@mail.ru";
$email->Password = "uuugvciiii";
$email->CharSet = 'UTF-8';
$email->From = 'figyra@mail.ru';
$email->addReplyTo('toster@com.ru', 'Name ');
$email->Subject = "Ваш заказ......";
// Добавить получателя из значений, найденных в Базы данных
$email->addAddress($row["email"], $row["Name"]);
$email->isHTML(true);
$base='https://eresct.ru/';
$email->Body ="Здравствуйте....
Ваш заказ: N {$row['id']}
$base/temа/{$row['zag_url']}_{$row['id']}
$message";
$email->AltBody = $message;
if(!$email->Send())
{
echo "Сообщение не может быть отправлено..";
echo "Ошибка почтовой программы: " . $email->ErrorInfo;
exit;
}
print "Sent mail to: {$row["email"]}
";
}
Подскажите пожалуйста.
$userOrders = [];
while ($row = $result->fetch_array()) {
$userId = $row['id_akk'];
if (!isset($userOrders[$userId])) {
$userOrders[$userId] = ['email' => $row['email'], 'name' => $row['Name'], 'orders' => []];
}
$userOrders[$userId]['orders'][] = $row;
}
foreach ($userOrders as $userData) {
$email = new PHPMailer;
// ... (настройка email)
$email->addAddress($userData['email'], $userData['name']);
$body = "Здравствуйте.... Ваши заказы:\n";
foreach ($userData['orders'] as $order) {
$body .= "N {$order['id']}: {$base}/temа/{$order['zag_url']}_{$order['id']}\n";
}
$email->Body = $body;
$email->send();
}
<?php
require_once '../PHPMailer-master/PHPMailerAutoload.php';
// Функция для отправки писем
function sendEmail($email, $name, $orders) {
$mail = new PHPMailer;
$mail->Host = "ssl://localhost";
$mail->SMTPAuth = true;
$mail->Port = 25;
$mail->SMTPSecure = 'SSL';
$mail->Username = "figyra@mail.ru";
$mail->Password = "uuugvciiii";
$mail->From = 'figyra@mail.ru';
$mail->addAddress($email, $name);
$mail->isHTML(true);
$mail->Subject = "Ваши заказы";
// Объединяем все заказы в одно сообщение
$mail->Body = "Здравствуйте, {$name}!<br>" . implode("<br>", $orders);
if (!$mail->Send()) {
throw new Exception("Сообщение не может быть отправлено. Ошибка: " . $mail->ErrorInfo);
}
}
// Основной код
try {
// Запрос на получение заказов
$query = "SELECT * FROM book WHERE id_akk > 0 AND (data1 - INTERVAL 1 DAY > NOW()) AND (data1 - INTERVAL 2 DAY < NOW())";
$result = mysqli_query($link, $query);
if (!$result) {
throw new Exception("Ошибка выполнения запроса: " . mysqli_error($link));
}
$emails = []; // Массив для хранения писем
// Сбор данных о заказах
while ($row = mysqli_fetch_assoc($result)) {
$email = $row["email"];
if (!isset($emails[$email])) {
$emails[$email] = [
'name' => $row["Name"],
'orders' => []
];
}
// Добавляем ссылку на заказ
$base = 'https://eresct.ru/';
$emails[$email]['orders'][] = "Ваш заказ: N {$row['id']} <br> {$base}temа/{$row['zag_url']}_{$row['id']}";
}
// Отправка писем
foreach ($emails as $email => $data) {
sendEmail($email, $data['name'], $data['orders']);
print "Sent mail to: {$data['name']} <br>";
}
} catch (Exception $e) {
echo "Произошла ошибка: " . $e->getMessage();
}
?>
еденые письма? круть!
Строки
Ваш заказ: N {$row['id']}
$base/temа/{$row['zag_url']}_{$row['id']}
Заместить циклом прохода по всем доступным ссылкам.
Убедиться, что из тела сайта скрипт будет вызван единожды, а не после каждой кнопки купить или откуда он у вас отрабатывает сейчас.