【发布时间】:2017-04-21 06:52:13
【问题描述】:
我正在通过 phpmailer 使用在线表单发送电子邮件,并尝试使用 for each 循环来自定义正文,特别是取消订阅按钮。我目前仅使用两封未加密的个人电子邮件进行测试。一旦它真正开始正常工作,我将添加加密。
我的php代码:
$mail = new PHPMailer;
/*php mailer settings*/
//All settings for php mailer here - working fine, email sends
/*for each loop to send bcc to each email and customize body*/
//array of emails - really loading from database with while loop
$subs_email("email1@example.com","email2@example.com");
foreach ($subs_email as $email) {
$mail->addBCC($email);
$mail->Body = '<p>This is the body text</p><a href="http://www.website.com/unsubscribe.php?email='.$email.'">Unsubscribe</a>';
}
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
}
使用上述代码的变体,电子邮件将发送 (bcc) 到数组中的两封电子邮件,但所有电子邮件都将获得相同的退订链接/电子邮件地址。注意 email1@ 被两次使用。
发送电子邮件至电子邮件地址 1: 正文看起来不错。
<a href="http://www.website.com/unsubscribe.php?email=email1@example.com">Unsubscribe</a>
电邮至电邮地址 2: 正文看起来不错。
<a href="http://www.website.com/unsubscribe.php?email=email1@example.com">Unsubscribe</a>
这显然不是我想要的。当我进行测试并在空白页面上回显 for each 循环文本时,它会按应有的方式显示每个自定义取消订阅链接,每个电子邮件地址都有一个。
感谢任何帮助,如果您需要更多帮助,请告诉我。
根据答案创建的工作代码 主要问题是使用 addBCC 而不是 addAddress
foreach ($subs_email as $email) {
$mail->addAddress($email);
$mail->Body = '<p>This is the body text</p><a href="http://www.website.com/unsubscribe.php?email='.$email.'">Unsubscribe</a>';
if (!$mail->send()) {
echo "Mailer Error" . $mail->ErrorInfo . '<br />';
break; //Abandon sending
}
// Clear all addresses and attachments for next loop
$mail->clearAddresses();
}
【问题讨论】:
-
so.. 你是在 foreach 循环内还是之后发送邮件?因为如果您之后发送,您的正文和链接将根据上次迭代的电子邮件设置。如果您在 foreach 循环中发送它,则一定有其他您未共享的内容导致错误
-
@Cashbee 它正在发送。所以你的评论是有道理的。我刚刚在循环中使用 send() 再次尝试,但现在每个地址都会收到两封电子邮件,一封带有正确的电子邮件地址链接,另一封带有正确的电子邮件地址链接……我已将代码更新为我最初所做的。跨度>