The default PHP timeout is 30 seconds on almost all servers, so there's a good chance that lancipoos is correct.
You can try adding this line inside the loop:
That resets the clock, but many servers ignore it.
You might take a look at the MandrillX class. It will send the emails through Mandrill (which lets you send 12,000 emails per month for free). It's not very difficult to set up and would avoid the timeout (plus give you lots of record keeping and bounce information at Mandrill).
BTW, I think the
Notify extra does almost exactly what you want (and has the option to use Mandrill). When coupled with
Subscribe, it also handles registration of the users and sends them an unsubscribe link.
If you register at Bob's Guides, you can see it in action.