PHPMailer 向每个用户发送 3 次电子邮件
PHPMailer sends email 3 times to each user
当我 运行 下面的代码时,它从数据库中获取电子邮件并向每个用户发送邮件 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();
}
"AddAddress" 显然会将收件人添加到现有的收件人中。
所以第一个订阅者被添加,收到一封邮件,第二个订阅者被添加到顶部,所以在循环中的第二个 运行 期间,第一个订阅者收到另一封邮件(因为 $mail 的实例现在有两个收件人)。 .. 然后在第三次迭代中,第三个订阅者被添加到顶部,因此在第三次 运行 期间,第一个订阅者收到了第三封邮件。不要对一百万收件人进行尝试:)
我不知道你的 PhpMailer-class 是如何工作的,但你需要在每次 send() 后清除你的收件人,或者使用不同于 "AddAddress" 的东西(例如 "SetAddress" 如果里面有这样的东西 class).
您必须清除地址,因为在循环中它将保留现有地址
所以在循环中也使用类似的东西
foreach ($emails as $row) {
$mail->ClearAddresses();
$mail->ClearCCs();
$mail->ClearBCCs();
//rest of the code
当我 运行 下面的代码时,它从数据库中获取电子邮件并向每个用户发送邮件 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();
}
"AddAddress" 显然会将收件人添加到现有的收件人中。 所以第一个订阅者被添加,收到一封邮件,第二个订阅者被添加到顶部,所以在循环中的第二个 运行 期间,第一个订阅者收到另一封邮件(因为 $mail 的实例现在有两个收件人)。 .. 然后在第三次迭代中,第三个订阅者被添加到顶部,因此在第三次 运行 期间,第一个订阅者收到了第三封邮件。不要对一百万收件人进行尝试:)
我不知道你的 PhpMailer-class 是如何工作的,但你需要在每次 send() 后清除你的收件人,或者使用不同于 "AddAddress" 的东西(例如 "SetAddress" 如果里面有这样的东西 class).
您必须清除地址,因为在循环中它将保留现有地址
所以在循环中也使用类似的东西
foreach ($emails as $row) {
$mail->ClearAddresses();
$mail->ClearCCs();
$mail->ClearBCCs();
//rest of the code