Richard Kurth 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.
There's no need to limit the DB query, nor to track what's been sent by
updating the DB. Grab all of the addresses at once and let SwiftMailer
deal with the throttling:
require('Swift/lib/Swift.php');
require('Swift/lib/Swift/Connection/SMTP.php');
/* this handles the throttling
*/
require('Swift/lib/Swift/Plugin/AntiFlood.php');
/* this holds all of your addresses
*/
$recipients = new Swift_RecipientList();
/* Grab the addresses from the DB (this is using MDB2)
*/
$result = ...
while ($row = $result->fetchRow())
{
$recipients->addTo($row['address'], $row['name']);
}
@$result->free();
try
{
$swift = new Swift(new Swift_Connection_SMTP('localhost'),
'your_domain');
set_time_limit(0);
$swift->log->enable();
/* 100 mails per batch with a 60 second pause between batches
*/
$swift->attachPlugin(new Swift_Plugin_AntiFlood(100, 60), 'anti-flood');
flush();
$message = new Swift_Message('your subject');
$message->setCharset('utf-8');
$message->setReplyTo(...);
$message->setReturnPath(...);
$message->headers->set('Errors-To', ...);
$message->attach(new Swift_Message_Part($plain_content));
$message->attach(new Swift_Message_Part($html_content, 'text/html'));
$num_sent = $swift->batchSend($message, $recipients, new
Swift_Address(..., '...'));
$swift->disconnect();
...
This is a rough example taken from my own script. This would need to be
modified if you're not sending the same message to all recipients, of
course. It's not clear to me from your example.
b
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php