Also, if you're going to have a script that "sleeps" a lot, the server is going to kill it off. There are limits to how long any script can stay executing (sleeping counts as executing).
An elegant solution might be to cron a number of smaller jobs and divide the load between them.
For example, if you have a registration timestamp on your usertable, you could cron a job to run every hour and code this job to select all users whose "hour" portion of their timestamp matches the current hour, and email them.
So, at 14:00 it would find all users who registered at a time beginning with "14:" on any date, and email them.
This would divide the load over the whole day.
If each hour's mailshot is still too big, you could break it down further... maybe running every 15 minutes... So, at 14:30 it would find all users who registered at a time beginning with "14:30" on any date, and email them.