Я работал над формой для массовой рассылки всех моих участников. По какой-то неизвестной мне причине сервер начал рассылать спам по электронной почте как сумасшедший! Сорри отправка сотен писем каждому. Это скрипт, который я использовал:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once '../../config.php';
require_once '../../src/Pdo.php';
require 'Exception.php';
require 'PHPMailer.php';
require 'SMTP.php';
if(!empty($_POST['message'])){
$mail = new PHPMailer(true);
$db = new MyChat\Database;
$db->query("SELECT
users.email AS email,
users.username AS username
FROM
users
WHERE
users.getmail = 1
AND
users.id
NOT IN
(SELECT bans.userid FROM bans)
AND
users.email
NOT IN
(SELECT blocked.email FROM blocked)
");
try {
$results = $db->resultset();
}
catch(PDOException $e){
echo "PDO Error: ". $e->getMessage();
}
foreach($results as $result){
if(filter_var($result['email'], FILTER_VALIDATE_EMAIL)){
try {
$mail->setFrom('noreply@example.com', 'Example');
$mail->addAddress($result['email']);
$mail->isHTML(true);
$mail->Subject = $_POST['subject'];
$mail->Body = str_replace("%username%",$result['username'],$_POST['message']);
$mail->AltBody = str_replace("%username%",$result['username'],$_POST['altmessage']);
$mail->send();
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}
}
echo 'succes';
} else {
echo 'empty';
}
Я попытался вернуть результат mysql самому себе, и он возвращает данные только один раз. Проверяя журнал Postfix var/log/mail.log
, он выглядит так, что вместо того, чтобы отправлять каждому пользователю свое сообщение по почте, он отправляет все сообщения каждому пользователю.
Таким образом, пользователь A получил почту для пользователя A, B, C, D .. и то же самое снова для пользователя B и т. д.
Я не понимаю, как это могло произойти? Я не могу найти ошибку в моем коде, который вызвал бы этот цикл? Тем более, что $mail->Body = str_replace("%username%",$result['username'],$_POST['message']);
правильно заменяет имя пользователя в каждом сообщении.