Здравствуйте. Ничего не могу понять, почему то некоторые итерации выполняются по два раза, по два раза пишутся в БД и по 2 раза отправляются письма. Так же хотелось бы через каждые 30 писем разрывать соединение, для этого я использовал $mail->SmtpClose(); в PHPMailer, но тогда вообще творится что-то странное, записи в БД появляются не по порядку(!), то есть не 1 2 3, а 1 3 2. Кто-нибудь может проявить причину такого поведения? И как сделать всё-таки, что бы письма отправлялись по 1 разу, между каждой отправкой была пауза в секунду, а после 30 писем разрывалось соединение и была пауза в 10 секунд и всё по новой..
Экспериментировал много раз, но дельного результата не добился ...
<?php
$identNumber = 0;
// Generate UUID v4 function - needed to generate a CID when one isn't available
function gaGenUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
foreach ($mails as $sendMail) {
$gcid = gaGenUUID();
$mailadressant = $sendMail;
$message = $mailtemplate;
$mail->ClearAllRecipients();
$mail->ClearCustomHeaders();
$mail->setFrom('mail@mail.ru', 'From mail');
$mail->addReplyTo('mail@mail.ru', 'From mail');
$mail->Subject = "Тема письма";
$mail->CharSet = 'UTF-8';
$mail->isHTML(true);
$mail->Body = $message;
$mail->AltBody = $message;
$mail->addAddress($mailadressant); // Add a recipient
$mail->addCustomHeader('List-Unsubscribe', 'http://mail.ru/uns.php');
if (!$mail->send()) {
$maillogstatus = 'Mailer Error: ' . $mail->ErrorInfo;
} else {
$maillogstatus = "ok";
}
sleep(1);
$sendQuery = ('INSERT INTO mail_log ( log, maillogstatus ) VALUES( ?, ? )');
$params = array( $mailadressant, $maillogstatus);
insertDB($sendQuery, $params);
if ($identNumber % 30 == 0) {
//$mail->SmtpClose();
sleep(10);
}
$identNumber = $identNumber + 1;
}
echo "done";