我向其发送邮件的每个用户都会重复 PHP Mailer 邮件

Posted

技术标签:

【中文标题】我向其发送邮件的每个用户都会重复 PHP Mailer 邮件【英文标题】:PHP Mailer Mails getting repeated for every user I send mails to 【发布时间】:2019-05-27 09:17:48 【问题描述】:

我有这个使用 phpMailer 发送邮件的代码。问题是我当前的代码重复了邮件。它采用这种格式。

邮件发送至:

user@gmail.com (1st go)
user1@gmail.com, user@gmail.com (2nd go)
user2@gmail.com, user1@gmail.com, user@gmail.com (3rd go)
user3@gmail.com, user2@gmail.com, user1@gmail.com, user@gmail.com (4th go)

....等等。

我认为这是因为我的 while 循环逻辑。还有什么其他方法可以向我的数据库中的成员发送一次批量电子邮件而不会重复?

这是我的代码:

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Host = $mainf['set_smtp_host'];
$mail->Port = $mainf['set_smtp_port'];
$mail->SMTPSecure = $mainf['set_smtp_security'];
$mail->Ishtml(true);
$mail->SMTPAuth = true;
$mail->Username = $mainf['set_smtp_uname'];
$mail->Password = $mainf['set_smtp_pass'];
$mail->setFrom($mainf['set_noreply_email'], $mainf['set_site_name']);
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->Subject = $sub;
$mail->Body    = $mail_msg;

$emails = $pdo->prepare("SELECT mem_name, mem_email FROM members WHERE mem_email_verified = 'yes' ORDER BY mem_id ASC LIMIT 5");
$emails-> execute();

while($u = $emails->fetch())
  $mail->addAddress($u['mem_email'], $u['mem_name']);
  $send = $mail->Send();


if($send)
  $msg = "<div class='alert alert-success'>Mail sent to all members successfully.</div>";
else
  $msg = "<div class='alert alert-danger'>Mail Server Error! Please refresh the page and try again.</div>";

另外,在邮箱中,我可以看到邮件被发送到的其他人是谁。我可以添加密件抄送选项以仅发送一次批量电子邮件而不会重复发送给任何人吗?

【问题讨论】:

【参考方案1】:
// option 1
while($u = $emails->fetch())
  $mail->addAddress($u['mem_email'], $u['mem_name']);
  $send = $mail->Send();
  $mail->ClearAllRecipients(); // reset the `To:` list to empty



// option 2
while($u = $emails->fetch())
  $mail->addAddress($u['mem_email'], $u['mem_name']);
  $mail->AddBCC($u[0]);


$mail->send();

【讨论】:

请检查$row 的代码...我知道您从哪里复制了这个答案。我也读过那篇文章。如果您理解,请在此处解释$row[0] 的应用(我猜应该是$u)。 请告诉我$u[0]在这里的应用是什么?它是如何工作的? $u[0] 包含$u 数组的第一个元素,在这种情况下将是mem_name 字段,这可能不是预期的。无需将地址传递给 addAddress addBCC - 第二个 sn-p 应该只调用 addBCC 所以如果我使用第二个 sn-p 那么我应该使用 $u[1] 还是应该将 SELECT mem_name, mem_email 替换为 SELECT mem_email, mem_name

以上是关于我向其发送邮件的每个用户都会重复 PHP Mailer 邮件的主要内容,如果未能解决你的问题,请参考以下文章

未在php中接收mail()函数发送的邮件[重复]

我的邮件没有被php函数mail()发送[重复]

如何防止通过 PHP mail() 发送的邮件进入垃圾邮件? [复制]

Php mail - 包含数组和条件的消息变量[重复]

带有 xampp 和 hMailServer 的 PHP mail() [重复]

如何使用php的mail函数