Я отправляю отчет, вызывая эту страницу PHP ежедневно в моем браузере. Он (слишком часто) отправляет электронные письма дважды (даже если я каждый раз открываю новую вкладку).
Что не так с кодом + Как я могу предотвратить это?
Вот код:
<?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@@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();
}
?>
Я собираюсь догадаться, что вы используете Google Chrome, и функция «Предварительная загрузка ресурсов для более быстрой загрузки страниц» включена. По сути, Chrome извлекает URL-адрес до того, как вы закончите печатать, поэтому, когда вы закончите печатать и нажмете клавишу ввода, вы снова запросите его.
Отключите предварительную выборку или сохраните URL-адрес в закладке и щелкните закладку, когда необходимо запустить задачу.
Сделайте так, как предложил SmartyCoder в комментариях.
Если вы уверены, что вы единственный, кто попадает в него, вы можете попробовать что-то быстрое и грязное с отслеживанием файлов cookie, например:
// 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') );
Это НЕ решает проблему, если другие устройства / пользователи бьют по вашему сценарию. Это также требует, чтобы вы использовали один и тот же браузер для отправки, и вы не можете использовать Incognito или другую вкладку частного просмотра.