Top.Mail.Ru
Ответы
Аватар пользователя
8 месяцев назад
от
Изменено

Как объеденить все письма для одного пользователя в одно, но ссылками на каждый заказ

Как бы рабочий код, но письмо приходит на каждый заказ отдельно, даже одного пользователя, а есть такие у которых больше 100, что в этом коде можно исправить, чтобы в одном письме прикреплялись все ссылки на заказы одного пользователя ?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
 <?
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"]} 
"; 
  
} 
 

Подскажите пожалуйста.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Просветленный
8мес
123456789101112131415161718192021
 $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(); 
} 
Аватар пользователя
Мудрец
8мес

<?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();
}
?>

Аватар пользователя
Оракул
8мес

еденые письма? круть!

Аватар пользователя
Просветленный
8мес

Строки

12
 Ваш заказ: N {$row['id']}  
$base/temа/{$row['zag_url']}_{$row['id']}  

Заместить циклом прохода по всем доступным ссылкам.
Убедиться, что из тела сайта скрипт будет вызван единожды, а не после каждой кнопки купить или откуда он у вас отрабатывает сейчас.