【问题标题】:phpmailer send to multiple emails including unique unsubscribe linkphpmailer 发送到多封电子邮件,包括唯一的退订链接
【发布时间】: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()

标签: php phpmailer


【解决方案1】:

这是您发送的两个链接:

  1. InMessage 正文: 2.内页眉 , http://url_to_unscribe.com

这是一个应该如何调用的示例:

  $mail->addCustomHeader("List-Unsubscribe",'<admin@keepity.com>, <http://keepity.com/?email='.$address.'>');

【讨论】:

    【解决方案2】:

    请试试这个

    $body = eregi_replace("[\]",'',$message);
    

    这段代码应该在while循环中。 您现在要做的是将取消订阅链接附加到 $body 的当前值,在循环中每次都添加一个新的取消订阅链接。

    所以循环执行的次数,除了已经存在的链接之外,它还会继续添加一个取消订阅链接。

    最终代码..

    if (isset($_POST['sendemail'])) {
        require_once "phpmailer/class.phpmailer.php";
        require_once "phpmailer/class.smtp.php";
        $message = "TEST MESSAGE";
        $mail = new PHPMailer();
    
        $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)) {
            $body = eregi_replace("[\]",'',$message);
            // 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";
        }
    }
    

    【讨论】:

    • 它没有多大帮助。是的,它向所有人发送 1 个链接。但是链接不正确。所有收件人都会收到相同的链接。但应该是他们的电子邮件。
    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 2017-06-27
    • 2011-07-14
    • 2014-04-14
    相关资源
    最近更新 更多