PHPMailer向每个用户发送电子邮件3次

时间:2019-03-08 11:19:43

标签: php mysqli phpmailer

当我运行以下代码时,它将从数据库中获取电子邮件,并向每个用户发送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 :(得分:0)

“ AddAddress”显然会将收件人添加到已经存在的收件人中。 因此,第一个订阅者被添加,接收到一封邮件,第二个订阅者被添加到ON TOP上,因此在循环的第二次运行期间,第一个订阅者获得了另一封邮件(因为$ mail的实例现在有两个接收者了)...然后在第三次迭代中,第三个订阅者被添加到顶部,因此在第三次运行期间,第一个订阅者获得了第三封邮件。不要与一百万收件人一起尝试:)

我不知道您的PhpMailer类是如何工作的,但是您需要在每个send()之后清除收件人,或者使用不同于“ AddAddress”的名称(例如,“ SetAddress”(如果该类中存在此类内容))

答案 1 :(得分:0)

您必须清除地址,因为这会保留现有地址

所以也要在循环中使用类似的东西

  foreach ($emails as $row) {
      $mail->ClearAddresses();  
      $mail->ClearCCs();
      $mail->ClearBCCs();
      //rest of the code