2016-03-01 31 views
1

我每天在瀏覽器中調用此PHP頁面發送報告。它(經常)發送兩次郵件(即使我確保每次都打開一個新標籤)。php郵件發送2份

代碼有什麼問題+我該如何防止它?

下面是代碼:

<?php 
require ("/home/phpmailer/PHPMailer-master/PHPMailerAutoload.php"); 
$mail = new PHPMailer; 

$mail->isSMTP();      // Set mailer to use SMTP 
$mail->Host = 'localhost';   // Specify main and backup SMTP servers 
$mail->SMTPAuth = true;    // Enable SMTP authentication 
$mail->Username = '[email protected]'; // SMTP username 
$mail->Password = 'PASSWORD';    // SMTP password 
$mail->SMTPSecure = 'tls';  // Enable TLS encryption, `ssl` also accepted 
$mail->Port = 587; // TCP port to connect to 

$mail->From = '[email protected]'; 
$mail->FromName = 'FROM NAME'; 

$mail->ClearAddresses(); 
$mail->addAddress('[email protected]', 'CLARA');  // Add a recipient 
$mail->addCC('[email protected]@ABC.com', 'TOM');   // Add a CC recipient 
$mail->addReplyTo('[email protected]', 'Info'); 
$mail->isHTML(true);       // Set email format to HTML 

$mail->Subject = 'EMAIL SUBJECT TITLE'; 
$mail->Body = file_get_contents('http://ADDRESS-OF-THE-FILE.PHP'); 

if(!$mail->send()) { 
echo 'Message could not be sent.'; 
echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
echo 'Message has been sent'; 
$mail->ClearAddresses(); 
} 

?> 
+3

使用cron或者類似的調度服務,以確保它只被稱爲每天一次。上面的PHP代碼看起來很好,所以如果您收到多封電子郵件,那麼您的頁面幾乎肯定會每天發生超過一次。 – Here2Help

+0

並放置在webroot之外,因此無法通過瀏覽器或機器人調用 – 2016-03-01 20:06:40

+0

「通過放置webroot」實際上意味着什麼? – SamanthaAlexandria

回答

0

我猜測您正在使用谷歌瀏覽器,並且啓用了「預取資源以更快地加載頁面」。本質上,Chrome瀏覽器在完成輸入之前獲取URL,因此當您輸入完成並點擊輸入時,您就會再次請求輸入。

關閉預取或將URL保存到書籤,並在需要運行任務時單擊書籤。

enter image description here

1

做的SmartyCoder的意見建議。

如果您確定你是唯一一個打它,你可以嘗試一些快速和骯髒與cookies來追蹤,如:

// See if a cookie is set, and if so, compare it to today 
// If cookie value == today, die() - stop executing 
if (isset($_COOKIE['email_reports_lastsent']) && 
$_COOKIE['email_reports_lastsent'] == date('Y-m-d')) die(); 

// Set the cookie as today's date 
setcookie('email_reports_lastsent', date('Y-m-d')); 

這並不能解決任何問題,如果其他設備/用戶打你的劇本。它還要求您使用相同的瀏覽器進行發送,並且不能使用隱身或其他隱私瀏覽選項卡。