super quick and dirty :
1) add "status" column to wp_signups defaulting to 0.
2) Create this script:
<?php
$user = "xxx";
$dbname = "yyy";
$pass = "zzz";
$host = "localhost";
$co = mysql_connect($host, $user, $pass);
if (!$co) {
exit();
}
mysql_select_db($dbname);
$today = date('Y-m-d');
$sql = "SELECT * FROM wp_signups WHERE active=0 AND status=0 AND registered<=DATE_SUB('".$today."', INTERVAL 1 DAY)";
$res = mysql_query($sql);
$k=0;
while($row=mysql_fetch_array($res)) {
$k++;
if($k%10==0) { sleep(2); }
if($row['domain']!='') {
$to = $row['user_email'];
$subject = 'Your blog activation';
$headers = "MIME-Version: 1.0\n" .
"From: email@domain.com\n" .
"Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$body = "your blurb here - activation : http://". $row['domain']."/wp-activate.php?key=".$row['activation_key'];
mail($to, $subject, $body, $headers, '-femail@domain.com');
$sql1 = "UPDATE wp_signups SET status=1 WHERE domain='".$row['domain']."'";
mysql_query($sql1);
}
}
mysql_close($co);
?>
3) Add it to crontab to run once a day.
untested as is (just extracted some stuff from my own script), use at your own risk blablabla. If you want to make things clean, replace mysql functions with WP's abstraction layer etc. Didn't take the time to do it myself.