此脚本会导致电子邮件发送两次(并非总是如此)。我读到这可能是浏览器的故障,所以我在没有扩展的情况下运行 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;
我多次尝试发送此邮件。 我希望它会到达一次,而不是两次或更多次
有关诊断此问题的文档位于此处。在主题中使用随机字符串是为了检查脚本是否被多次调用,这似乎不是您的问题。
我建议不通过
sendmail
发送(不清楚为什么你认为你需要这样做),但使用SMTP(即不要注释掉isSMTP()
),因为你的大多数代码似乎都想要,并使用 $mail->SMTPDebug = 2
设置调试输出,以便您可以准确地看到脚本发送到服务器的内容。例如,如果您的 SQL 导致重复行,则会导致您的症状。
您不应该使用任何
mysql_
功能;该扩展早已过时,但这不是这里的问题。