我正在通过phpmailer使用在线表单发送电子邮件,并试图为每个循环使用一个来自定义主体,特别是一个取消订阅按钮。我目前只使用我的两封没有加密的个人电子邮件进行测试。我将添加加密,一旦这实际上开始工作,它应该。
我的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@两次使用。
电子邮件到电子邮件地址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>
这显然不是我想要的。当我做测试,只是回音为每一个循环文本在一个空白页,它显示每个定制的取消订阅链接,每个电子邮件地址。
任何帮助都是非常感谢的,如果你需要更多的帮助,请告诉我。
基于创建的工作代码主要问题是使用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();
}
发布于 2016-12-06 09:30:32
这是密件抄送的工作方式-相同的消息被发送给所有收件人。您需要向每个收件人发送一条单独的消息,如PHPMailer提供的邮件列表示例中所述。
为了提高效率,您应该在循环之前创建一个实例,遍历列表,同时为每条消息设置不同的正文(您所拥有的代码很好,如果您希望更灵活地使用模板系统),发送消息,然后清除收件人列表,以便下一条消息只发送到一个地址。它还有助于使用SMTP保活来提高吞吐量。示例脚本完成了大部分工作。
发布于 2016-12-06 08:14:33
您的方法是不正确的,因为您正在向N个收件人发送“一个”邮件,发送后必须使用addAddress和clearAddresses()
<?php
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>';
$mail->send();
$mail->clearAddresses();
}
发布于 2020-07-07 02:52:26
我用了$mailer->ClearAllRecipients()
<?php
foreach($subs_email as $email){
$mailer->isHTML(true);
$mailer->CharSet = 'UTF-8';
$mailer->addAddress($email);
$mailer->Body = '<div>This is the body text</div><a href="http://www.website.com/unsubscribe.php?email='.$email.'">Unsubscribe</a>';
$mailer->send();
$mailer->ClearAllRecipients()
}
https://stackoverflow.com/questions/40998652
复制