views:

325

answers:

6

Hi All

I have to send mails to all users in the site when a new user joins. My problem is the script stops execution after sending around 400 mails. I have set the set_time_limit to 0. And also I am giving sleep(2) after sending 10 mails.

What may be the reason behind this issue.Any solution for this problem . Is there any better method to send bulk emails?

Thanks in Advance

Rose

A: 

I had a similar issue and it was down to memory usage, how are you sending them, can you provide any code?

mononym
+2  A: 

The way we do it is with the help of cron.

We (at our company) split up the userlist in blocks of 50 addresses. These blocks are put in a table in the database (with data that links this block to the e-mail data (headers, body, ..).

Through a cron.php file, which is triggered every 5 minutes or so, the system grabs the first available block in the database that needs to be sent and sends out the emails.

zilverdistel
I am also using cron jobs ,which is set to execute twice in day.I cant follow the above method because 1.There may be more than one new user in the site and this list changes from time to time.2.I need to update a field(new user flag to zero) corresponding to each new users after sending that user details to all others users in the site
Rose
A: 

If PHP is running in safe mode, set_time_limit will have no effect. If you must run PHP in safe mode, you can modify the default time limit using the configuration directive max_execution_time.

Propeng
safe mode is off in may case
Rose
A: 

I don't know why your script stops. But you also asked for better ways to send bulk emails. I found that using an email package gives you much more control than the built-in PHP mail command. Swift Mailer is a very good one.

Sam
A: 

Try setting up a task queue. When your web application wants to send an email, it adds it to a database of tasks and a separate daemon processes each one. This means, you can set an email to be sent to every member of the website and your daemon will send each one every 2-4 seconds. See the Kohana task queue module (PHP), Delayed_job (Ruby), and Celery (Python) for some inspiration.

Gabriel Evans
A: 

I'm posting a new answer because this one doesn't relate to my previous one.

I was wondering: where exactly do you set set_time_limit to 0? I mean, is it in php.ini, .htaccess, or from a php file with ini_set().

Is it possible that this value gets overridden?

zilverdistel