PHPmailer 发送邮件两次

问题描述 投票:0回答:1

此脚本会导致电子邮件发送两次(并非总是如此)。我读到这可能是浏览器的故障,所以我在没有扩展的情况下运行 chrome。还是一样.. 主题行包含一个随机数,因此我可以看到这是同一封邮件。 所以我的收件箱里有两次相同的号码。

是否有浏览器可以安全地通过 PHPmailer 批量发送邮件(邮寄)?

这是我的代码(这可能不是问题)

if(!isset($_SESSION[$reciever]))
    {
       $_SESSION[$reciever] = 1;
     




require "mail_inhoud.php";                          // <== IMPORTANT INCLUDE

$maand = date('Ym'); // 202103
$datum = date('Ymd'); // '20210406'
$datum_tijd = date('Ymd H:i'); // '20210406'

$maand_ENG = 'March'; 
$teller = 1;



                    

     
$raw_results = mysql_query("SELECT EMAIL FROM EMAILS_TESTBANK") or die(mysql_error());      

              //Create a new PHPMailer instance
            $mail = new PHPMailer();

            $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead

            $mail->CharSet = 'UTF-8'; 
            //$mail->isSMTP(); 
            $mail->Mailer = 'sendmail'; 
            $mail->SMTPAuth   = true;
            $mail->Host = 'xxxxxx';
            $mail->Port = 587;
            $mail->Username   = "xxxxx" ;  
            $mail->Password   = "xxxxxx"; 
            $mail->SMTPSecure = "tls";
            $mail->setFrom('[email protected]', 'MERS Antique Books Antwerp');
            $mail->Sender = '[email protected]'; 
            $mail->addReplyTo('[email protected]', 'MERS Antique Books Antwerp'); 
            
                 
            $mail->Subject = 'Test Mail ' . rand();
            
            
            $ONDERWERP =  "Catalogue for $maand_ENG";
            $mail->Encoding = 'base64';

            $today = date('Ymd'); 




      if(mysql_num_rows($raw_results) > 0){
          while($row = mysql_fetch_array($raw_results)){
          

                
                    $email = $row['EMAIL'];
                    $email_user = $row['EMAIL'];


                    /* We stellen de INHOUD OP */
                    $message = "";
                    $message .= "<html>";
                    $message .= "<body>";

                    $message .= "<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
                    $message .= "<tr><td align='center' style='width:600px'>";

                    $htmlContent = file_get_contents("$maand/INTERNATIONAAL.html");
                    $message .= $htmlContent;
                    $message .= "<br><br>";
                    $message .= "<div style='text-align:center'>";
                    $message .= "<span>This email was sent to $email</span> | <a href='https://www.mers.be/unsubscribe.php?EMAIL=$email' target='new' style='color:#666; text-decoration:none'>Unsubscribe</a>";
                    $message .= "<br><br>";
                    $message .= "<div style='visibility:hidden !important; opacity:0 !important; display:none !important' >";
                    $message .= "<img style='visibility:hidden !important' src='https://www.mers.be/backend/MAILING_NEW/mailcheck.php?user=$email&subject=$ONDERWERP'>";
                    $message .= "</div>";
                    $message .= "</div>";

                    $message .= "</td></tr>";
                    $message .= "</table>";
                    //$message .= $teller;

                    $message .= "</body>";
                    $message .= "</html>";
                    
                    $body = $message; 
                    
                    $mail->msgHTML($body);
                    $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 

                    
                        $raw_check = mysql_query("SELECT EMAIL FROM EMA_CONTROLE WHERE EMAIL = '$email_user' AND DATE = '$today'") or die(mysql_error()); 
                        
                       if(mysql_num_rows($raw_check) > 0){
                        // DO NOTHING, EMAIL WAS ALREADY SENT
                            echo 'EMAIL ALREADY SENT<br>';
                        }else{
                            echo 'NOT YET SEND<br>';
                            $mail->addAddress($email, 'Receiver name');
                            $mail->send(); // SEND EMAIL
                            $mail->clearAddresses();
                            $mail->clearAttachments();

                            echo 'Message sent to :  (' . htmlspecialchars($row['EMAIL']) . ')<br>';
                            //Mark it as sent in the DB
                            $OND = "NEW ARRIVALS MARCH DEEL 1";

                            mysql_query('SET NAMES UTF8'); 
                            mysql_query("INSERT INTO `MAILING_VERZONDEN` 
                            (`DATUM`, `EMAIL`, WELKE_MAILING, `TAAL`, `RECEIVER`) VALUES 
                            ('$datum_tijd', '$email','$OND', 'INTERNATIONAAL', 'KLANT' )") or die(mysql_error());

                            mysql_query("INSERT INTO `EMA_CONTROLE` ( `EMAIL`, `DATE`) VALUES ('$email','$today')") or die(mysql_error());
                        }
                        
                    

echo $teller; echo '<br>';
  $teller++;
  
}
}




    }
  else{
        echo "doing it more than once";
     }

$conn = null;
$con = null;
exit;

我多次尝试发送此邮件。 我希望它会到达一次,而不是两次或更多次

phpmailer
1个回答
0
投票

有关诊断此问题的文档位于此处。在主题中使用随机字符串是为了检查脚本是否被多次调用,这似乎不是您的问题。

我建议通过

sendmail
发送(不清楚为什么你认为你需要这样做),但使用SMTP(即不要注释掉
isSMTP()
),因为你的大多数代码似乎都想要,并使用
$mail->SMTPDebug = 2
设置调试输出,以便您可以准确地看到脚本发送到服务器的内容。例如,如果您的 SQL 导致重复行,则会导致您的症状。

您不应该使用任何

mysql_
功能;该扩展早已过时,但这不是这里的问题。

© www.soinside.com 2019 - 2024. All rights reserved.