php doesn't have any time functions like that, so it seems like it would either have to be scheduled somehow. but if you don't have access to that, then you can probably write a script that just sends 50 at a time, but you would have to manually start it when you want it to run.
to make it run 50 at a time, you can just put a metarefresh in a page that executes after 50 emails are sent. then just forward a variable for where you left off.
for example:
<?
if(!start)
{
$start == 1;
}
$result=mysql_query("select id,email from table limit $start,50");
$num=mysql_numrows($result);
for($i=0;$i<$num;$i++)
{
$result=mysql_result($result,$i,"_id");
$id=mysql_result($result,$i,"email");
mail("$email");
$start = $id + 1;
}
echo "<META HTTP-EQUIV=\"refresh\" content=\"2;URL=$PHP_SELF?start=$start">";
?>
haven't tested that code, but it is just a general idea.