On Tue, Jul 29, 2008 at 4:52 PM, Richard Kurth <richardkurth@xxxxxxxxxxxxxx> wrote: > I want to limit these script two send 100 email and then pause for a few > seconds and then send another 100 emails and repeat this tell it has sent > all the emails that are dated for today. This script is runs by cron so it > is running in the background. > > How would I do this and is it the best way to do it. I am using swift mailer > to send the mail. > > I think I would use limit 100 in the query but how would I tell it to get > the next 100. > > $today = date("Y-m-d"); > # Cache the Contact that will recive campain messages today > $query = "SELECT emailmessages. * , contacts.* FROM emailmessages, contacts > WHERE emailmessages.contact_id = contacts.id AND > emailmessages.nextmessagedate = '$today' AND contacts.emailstatus = > 'Active'"; $DB_Contact_Result = mysql_query($query); > if (!$DB_Contact_Result) { > die('Invalid query: ' . mysql_error()); > } > while ($this_row = mysql_fetch_array ($DB_Contact_Result)){ > > $CustomerID=$this_row["id"]; > > //get the message for the contact > $query1 = "SELECT * FROM emailcampaign where member_id = > '$this_row[members_id]' AND campaign_id = '$this_row[emailcampaign]' AND day > = '$this_row[email_number]'"; > > $DB_Mail_Result = mysql_query($query1); > if (!$DB_Mail_Result) { > die('Invalid query: ' . mysql_error()); > } > $Mail_row = mysql_fetch_array($DB_Mail_Result); > //get member stuff > $query2 = "SELECT * FROM member where members_id = > '$this_row[members_id]'"; > > $DB_Member_Result = mysql_query($query2); > if (!$DB_Member_Result) { > die('Invalid query: ' . mysql_error()); > } > > $subject=stripslashes($Mail_row['subject']); > > $message=stripslashes($Mail_row['textmessage']); > > $hmessage=stripslashes($Mail_row['htmlmessage']); > > $swiftPlain = $message; > $MailFrom1=$this_row['emailaddress']; > $MailFromName1=$this_row['firstname']; > > $full_name=stripslashes($this_row['firstname']) ." " . > stripslashes($this_row['lastname']); > //Create the message > $message = new Swift_Message($subject); > $message->attach(new Swift_Message_Part($swiftPlain)); > $message->attach(new Swift_Message_Part($swiftHtml, "text/html")); > $message->setReturnPath($MailAddReplyTo); > $message->setReplyTo($MailFrom1,$MailFromName1); > //Now check if Swift actually sends it > $swift->send($message, $this_row['emailaddress'],$MailFrom1,$MailFromName1); > > #After we send the email we need to update the database to send the next > message > # get the next message number > $nextday=getnextday(stripslashes($this_row['emailcampaign']),stripslashes($this_row['members_id']),stripslashes($this_row['email_number'])); > # get the new dates > $newdate=getnewdate(stripslashes($this_row['emailstarted']),$nextday); > #update the emailmessages > //unsubscribecode > updateemailmessages($unpass,$nextday,$newdate,stripslashes($this_row['em_id']),stripslashes($this_row['email_number'])); > > > > }//end of mail loop > I've done something very similar. I have a delivery timestamp column in the table that is initially NULL, and I set it to UTC_TIMESTAMP() for each row as I send the message. My query looks like this then: SELECT * FROM mail_queue WHERE delivery_timestamp IS NULL LIMIT 100. Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php