Tjena
Jag har lite problem med en funktion för Nyhetsbrevsutskick som började strula igår.
Koden ser ut såhär (bygger på PHP Mailer):
<?php
if(!empty($_GET['send'])) {
$htmlbody = file_get_contents("membermail/{$_GET['send']}.htm");
$alt_body = file_get_contents("membermail/{$_GET['send']}.txt");
$subject = file_get_contents("membermail/{$_GET['send']}.subject");
$mail = new PHPMailer();
$mail->Subject = $subject;
$mail->From = $email;
$mail->FromName = "******.**";
$mail->Host = "mailout.*****.**";
$mail->Mailer = "smtp";
$mail->Body = $htmlbody;
$mail->AltBody = $alt_body;
if(!isset($_GET['start_id']))
$start_id = 1;
else
$start_id = $_GET['start_id'];
$batch_limit = 100;
//TA UT SISTA id som ska ha medlemsmail
$query = "SELECT id FROM " . TABLE_USERS . " WHERE membermail = 1 ORDER BY id DESC LIMIT 1";
$result = mysql_query($query) or exit(mysql_error());
$last_id = mysql_result($result, 0);
//TA ut n nästa
$query = "SELECT email,id FROM " . TABLE_USERS . " WHERE membermail = 1 AND id >= $start_id LIMIT $batch_limit";
$result = mysql_query($query) or exit(mysql_error());
$n = 1;
while ($row = mysql_fetch_array($result)) { // Denna loop skickar ut mailen till alla emailadresser
$email = $row["email"];
$mail->AddAddress($email);
//echo $email . "<br />";
@$mail->Send();
usleep(2000000);
// Clear all addresses and attachments for next loop
$mail->ClearAddresses();
$mail->ClearAttachments();
$end_id = $row['id'];
} //END OF WHILE
$delay = 15;
if($end_id!=$last_id) { //REDIRECT TO NEXT BATCH
$percentage_done = round((($end_id / $last_id)*100),0) . "%";
$tpl->set('submitted', TRUE);
$tpl->set('message', "<p>Var vänlig vänta under tiden medlemmsmailet skickas ut. <br />($delay sekunders intervaller)<br /><br />" . $percentage_done . '</p>');
echo "<META HTTP-EQUIV=Refresh CONTENT=\"{$delay}; URL=./?a=membermail&send={$_GET['send']}&start_id={$end_id}\">";
} else if($end_id==$last_id) { //WHEN DONE
$tpl->set('submitted', TRUE);
$tpl->set('message', $language['__membermail']['submitted']);
}
}
?>
Meningen är att det ska gå ut till ca. 5000 kunder, men vid första försöket igår gick det bara ut till ca. 5% och sen gjorde det timeout.
Vi har varit i kontakt med B-One där sajten ligger och dom säger att det säkert beror på att servern gör timeout.
Så, går det att justera något i scriptet för att undvika det här?
Det gör ingenting om själva utskicket tar längre tid, bara alla mail går iväg schysst.
Tack!