Hi,

just a few random bits and pieces
database layout:
email varchar(64) unique,
code char(32), -- depends on coding
applied timestamp,
confirmed timestamp

php to add a new subscriber
Code:
<?
include "connect.php";
$email = $_POST['email'];
$res = mysql_query("select * from subscriptions where email = '$email'");
if(mysql_num_rows($res))
{  if(mysql_result($res, 0, "confirmed") != "")
      print "&status=confirmed";
   else
   {   print "&status=applied";
       sendmail($email, mysql_result($res, 0, "code"));
    }
}
else
{   $code = md5(time() . $email);
    mysql_query("insert into subscriptions (email, code, applied) values ('$email', '$code', now())");
    sendmail($email, $code);
    print "&status=new";
}
function sendmail($email, $code)
{   mail($email, "subscription", "please visit http://www.yourserver.com/newsletterconfirm.php?code=$code");
}
?>
php to accept subscription
Code:
<?
include "connect.php";
$code = $_GET["code"];
$res = mysql_query("select * from subscriptions where code = '$code'");
if(!mysql_num_rows($res))
   die("sorry, not in database");
else if(mysql_result($res, 0, "applied"))
   die("subscription already completed - we are just lazy on sending newsletters");
else
{   mysql_query("update subscription set applied = now() where code = '$code'");
    print "subscription confirmed - we will send newsletters to " . mysql_result($res, 0, "email");
}
Musicman