Thanks m8, I appreciate it. Cheers! -Ryan --- Richard Lynch <ceo@xxxxxxxxx> wrote: > On Tue, May 2, 2006 6:16 am, Ryan A wrote: > > The problem is the host is limiting the amount of > > emails that can go from the site per minute, and > we > > need to email all the members (a modest 700 or so) > a > > newsletter/update...any suggestions on how to do > that? > > The main problem with using mail() for mass emails > is that every call > to mail() fires up sendmail, and you can easily > swamp your machine. > > If the host won't let you do more than X per minute, > and you write a > loop to stay within that limit > (http://php.net/sleep) then you should > probably be okay. > > I wouldn't want to do it for THOUSANDS of emails, > but you're probably > going to run into time-delay problems of the mail > not being relevant > because of the server-enforced limits before > anything else. > > I had to do this once for a client, and I'll just > paste my code here. > > It's crude in many ways, as I don't really know > ADOdb well enough to > remember the darn function names, but didn't want to > write a second > 'connect' script, so I sort of use ADO to connect, > and then ignore > ADO. > > > <?php > require_once 'lib/common/Init.inc'; > $init = new Init; > $db = $init->getAdoDbConnection(); > $dbconn = $init->getAdoDbConnection(); > require 'email_message.php'; > $message_object = new email_message_class(); > $query = "select mail_id, subject, plain, html > from mail "; > $query .= " where autosend "; > $query .= " and send_date <= now() "; > $query .= " and sent_date is null "; > $result = mysql_query($query) or die("Error in > query: $query. " . > mysql_error()); > > $errors = ''; > $from = '"Example" <nobody@xxxxxxxxxxx>'; > #$errors .= > $message_object->SetHeader('Return-Path', $from); > $errors .= $message_object->SetHeader('From', > $from); > $errors .= $message_object->SetHeader('Reply-to', > $from); > > $query = "select email from user where newsletter > order by > reverse(email) "; > $victims = mysql_query($query) or die("Error in > query: $query. " . > mysql_error()); > > > //Policies dictate no more than 50 messages per > minute, nor 500 per > hour > $start = time(); > $counter = 0; > while (list($mail_id, $subject, $plain, $html) = > mysql_fetch_row($result)){ > $errors .= > $message_object->AddPlainTextPart($plain); > $errors .= $message_object->AddHTMLPart($html); > $errors .= $message_object->SetHeader('Subject', > $subject); > mysql_data_seek($victims, 0); > while (list($victim) = > mysql_fetch_row($victims)){ > $errors .= $message_object->SetHeader('To', > $victim); > if (1){ > $errors .= $message_object->Send(); > } > else{ > echo "<pre>"; > ob_start(); > var_dump($message_object); > $data = ob_get_contents(); > ob_end_clean(); > echo htmlentities($data); > error_log(htmlentities($data)); > echo "</pre>"; > } > echo $errors; > $counter++; > //So sleep a minute every 50 messages, or for > an hour after 500 > if (($counter % 50) === 0) sleep(60); > if (($counter % 500) === 0) sleep(60*60); > } > $query = "update mail set sent_date = now() > where mail_id = > $mail_id"; > mysql_query($query) or die("$query\n" . > mysql_error()); > } > ?> > > -- > Like Music? > http://l-i-e.com/artists.htm > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > ------ - The faulty interface lies between the chair and the keyboard. - Creativity is great, but plagiarism is faster! - Smile, everyone loves a moron. :-) ----- Fight back spam! Download the Blue Frog. http://www.bluesecurity.com/register/s?user=bXVzaWNndTc%3D __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php