webForumDet fria alternativet

Problem med Nyhetsbrevsutskick

2 svar · 442 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

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&amp;send={$_GET['send']}&amp;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!

spangoMedlem sedan juni 20008 205 inlägg
#2

Om jag inte är helt körd såhär i slutet på veckan, visst får alla exakt samma innehåll? Då är det väl mycket smartare att göra en lista av mottagare som du sätter som BCC, och sen skickar ett enda mail till alla mottagare.

red. Men om du vill ändra på timeouten kan du flukta på http://se.php.net/set_time_limit

MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Jo, alla ska få exakt samma innehåll, men jag vet inte hur jag ska göra för att ställa in det så.
Får helt enkelt kolla upp lite mer om PHP Mailer.

Tack!

124 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)