I'm not a 100% sure that sleep is your best bet in the end though, at least not as is. If for whatever reason there's a slight delay in being able to get those emails out, you could be losing maximum usage of your outbound mail. For instance, if it takes a few seconds to send a batch, sure, that's fine. But what if the mailserver is in a crabby mood that day and it takes a couple extra minutes to send? One off the cuff thought on this is that you could still use sleep, but maybe use a timer function (for some reason using benchmark comes to mind, but I'm sure that's not the most elegant solution) so that you can set your sleep to be a variable interval - maximum per time block minus how long it took to send the last batch, rounded up to an integer. Just a thought - of course, I live in a weird world where things never go as smoothly as I had hoped :)
"I have never written bad code. There are merely unanticipated features."