PHPMailer отправляет электронную почту 3 раза каждому пользователю - PullRequest
0 голосов
/ 08 марта 2019

Когда я запускаю приведенный ниже код, он получает электронную почту из базы данных и отправляет почту 3 раза каждому пользователю. Я не знаю, что не так в моем сценарии. Может кто-нибудь помочь мне решить эту проблему?

<?php
date_default_timezone_set('Asia/Kolkata');
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor\autoload.php';

$mail = new PHPMailer(TRUE);

include 'connection.php';

$result = mysqli_query($conn,"SELECT * FROM `newspaper_subscriber` WHERE 
status = '1'");

if (mysqli_num_rows($result) > 0) {    
while($rows = mysqli_fetch_object($result)) {

    $emails[$rows->subscriber_email] = $rows->subscriber_email;
}
}
foreach ($emails as $row) {
        $mail->setFrom('xyz@gmail.com', 'xyz');
        $mail->Subject = 'Weekly Newspaper';
        $mail->Body = 'For unsubscribe email us at 
        xyz@gmail.com';
        $mail->AddAddress($row);
        $mail->isSMTP();

        $path = __DIR__."\/01.pdf";
        $mail->addAttachment($path, "newspaper.pdf");
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = TRUE;
        $mail->SMTPSecure = 'ssl';
        $mail->Username = 'xyz@gmail.com';
        $mail->Password = 'xyzxyz';
        $mail->Port = 465;
        $mail->send();

}

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Вы должны очистить адрес, так как в цикле он сохранит существующий адрес

, поэтому используйте что-то подобное в цикле также

  foreach ($emails as $row) {
      $mail->ClearAddresses();  
      $mail->ClearCCs();
      $mail->ClearBCCs();
      //rest of the code
0 голосов
/ 08 марта 2019

«AddAddress», очевидно, добавит получателя к уже существующим. Таким образом, первый подписчик добавляется, получает почту, второй подписчик добавляется ON TOP, поэтому во время второго запуска в цикле первый подписчик получает другое письмо (потому что экземпляр $ mail теперь имеет двух получателей) ... затем в В третьей итерации третий подписчик добавляется в ТОП, поэтому во время третьего запуска первый получает третье письмо. Не пытайтесь сделать это с миллионом получателей:)

Я не знаю, как работает ваш класс PhpMailer, но вам нужно очищать получателей после каждого send () или использовать что-то отличное от AddAddress (например, «SetAddress», если в этом классе есть такая вещь) .

...