【发布时间】:2016-05-10 09:10:57
【问题描述】:
我正在制作 php 脚本来发送带有取消订阅每个收件人的选项的时事通讯。
下面的代码有效 - 向我在 DB 中的每个订阅者发送和发送电子邮件。但是,它会向所有人添加取消订阅链接。因此,如果我有 2 个订阅者,他们都会获得相同的消息正文和 2 个取消订阅的链接。
这里是代码。
if (isset($_POST['sendemail'])) {
require_once "phpmailer/class.phpmailer.php";
require_once "phpmailer/class.smtp.php";
$message = "TEST MESSAGE";
$mail = new PHPMailer();
$body = eregi_replace("[\]",'',$message);
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = "myserver";
$mail->Port = 465;
$mail->Username = "myuser";
$mail->Password = "mypass";
$mail->SMTPDebug = false;
$mail->do_debug = 0;
$mail->SetFrom("me@domain.ltd", "Me");
$mail->AddReplyTo("me@domain.ltd", "Me");
$mail->AddAddress("some@email.com", "member");
// I GET LIST OF SUBSCRIBED EMAILS AND LOOP THE MAIL SENDING
$result = dbquery("SELECT * FROM emails WHERE email_sub='1'");
while($row = dbarray($result)) {
// HERE SHOULD BE ONIQUE UNSUBSCRIBE LINKO FOR EACH EMAIL
$body .= "<br /><a href=\"http://someurl.tld/emails.php?email=".$row["email_address"]."\">Unsubscribe</a>";
$mail->Subject = $subject;
$mail->MsgHTML($body);
$mail->WordWrap = 50;
$mail->AddBCC($row["email_address"], $row["email_name"]);
$mail->addCustomHeader("List-Unsubscribe","<admin@keepity.com>, <http://keepity.com/?email=".md5(md5($row["email_address"])).">");
}
if(!$mail->Send()) {
echo "<i class=\"fa fa-warning\"></i> Error: " . $mail->ErrorInfo."<br />";
} else {
echo "Done";
}
}
所以电子邮件看起来像这样
Message body.....
Unsubscribe
Unsubscribe
所以如果我有 100 个订阅者,每封电子邮件中就会有 100 个链接..
【问题讨论】:
-
你在 while 循环之外设置了发送函数
-
旁注:
eregi_replace()已弃用。使用preg_replace()。