管理小型的邮件列表
首先是订阅/退订脚本,它所做的工作就是从数据库表中增加或删除记录。把它叫做"manage.phtml" 或差不多的什么东西。这样呢,就需要后台是某种数据库,在上面可以创建订阅表。根据政治中的半数原则,所以我将使用MySQL作为这个例子的数据库。你可以使用任何你常用的数据库,只是根据PHP手册替换正确的 在我的订阅表中,我使用了两个字段:邮件地址(email_addr)和添加日期(date_added)。你可以根据需要增加字段,或者将date_added字段删除。在这个例子中,我只是向你展示我做了什么,你可以适当的进行修改。在我的订阅表中,email_addr字段是一个不重复字段,意味着你不能增加另一个与之完全一样的e-mail地址。这个可以避免重复订阅,而且当用户想退订时,也使删除记录的方法变得简单和可靠。 那么,让我们创建订阅/退订表单吧(manager.phtml或你想起的什么名字)。我使用同一个文件处理订阅和退订,也包括表格自身的动作,所以可能有点复杂。我将从头到尾讲解,然后把所有的片段组合在一起,放在一个表单中。 在脚本的开始处,是打开数据库和准备时间戳。在开始时处理这些不显眼的东西总是可以为我减轻一点压力。 -------------------------------------------------------------------------------- mysql_select_db("yourDB", $db) or die ("不能选择数据库。"); // 得到时间戳 -------------------------------------------------------------------------------- //需要订阅/退订 $text_block = " <form name=/"form/" method=post action=/"$PHP_SELF/"> <p><strong>your e-mail address:</strong><br> <p><strong>action:</strong><br> <P><input type=submit name=/"submit/" value=/"do it/"></p> "; }-------------------------------------------------------------------------------- 这个表单的动作是$PHP_SELF ,可以想象一下,它的意思就是当按下了提交按钮之后,它将会被重新装 在表单被提交之后,$op将等于"ds",并且$action的值将包含"sub"或"unsub"。那么,我们继续看上面 -------------------------------------------------------------------------------- // 检查邮件还未提交则提交它们,否则返回信息 $check = "select email_addr from subscribers $check_result = mysql_query($check) $check_num = mysql_num_rows($check_result); if ($check_num == 0) { // 如果$check_num为0,则没有找到匹配的记录,用户应该被提交 $sql = "insert into subscribers @mysql_query($sql) or die ("Couldn't insert email."); $text_block = " } else { // 如果$check_num不为0,则用户已经提交过了,你应该让他们知道 $text_block = " } }-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- // 检查已经订阅过,然后将他们退订,否则返回信息 $check = "select email_addr from subscribers $check_result = mysql_query($check) $check_num = mysql_num_rows($check_result); if ($check_num == 0) { // 如果$check_num为0,则没有找到匹配记录,用户不能被退订 $text_block = " } else { // 如果$check_num不为0,则用户在列表中,所以可以被退订 $sql = "delete from subscribers @mysql_query($sql) or die ("不能删除email。"); $text_block = " } ?>-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- <BODY> <h1>订阅/退订</h1> <?php echo "$text_block"; ?> </BODY> -------------------------------------------------------------------------------- // 连接数据库 mysql_select_db("yourDB", $db) or die ("不能选择数据库。"); // 得到时间戳 if ($op != "ds") { //需要订阅/退订 $text_block = " <form name=/"form/" method=post action=/"$PHP_SELF/"> <p><strong>your e-mail address:</strong><br> <p><strong>action:</strong><br> <P><input type=submit name=/"submit/" value=/"do it/"></p> "; // 检查邮件还未提交则提交它们,否则返回信息 $check = "select email_addr from subscribers $check_result = mysql_query($check) $check_num = mysql_num_rows($check_result); if ($check_num == 0) { // 如果$check_num为0,则没有找到匹配的记录,用户应该被提交 $sql = "insert into subscribers @mysql_query($sql) or die ("Couldn't insert email."); $text_block = " } else { // 如果$check_num不为0,则用户已经提交过了,你应该让他们知道 $text_block = " } } else if (($op == "ds") && ($action == "unsub")) { // 检查已经订阅过,然后将他们退订,否则返回信息 $check = "select email_addr from subscribers $check_result = mysql_query($check) $check_num = mysql_num_rows($check_result); if ($check_num == 0) { // 如果$check_num为0,则没有找到匹配记录,用户不能被退订 $text_block = " } else { // 如果$check_num不为0,则用户在列表中,所以可以被退订 $sql = "delete from subscribers @mysql_query($sql) or die ("不能删除email。"); $text_block = " } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <BODY> <h1>订阅/退订</h1> <?php echo "$text_block"; ?> </BODY> -------------------------------------------------------------------------------- <BODY> <h1>Send a Newsletter</h1> <FORM ACTION="do_send_mail.phtml" METHOD="post"> <P><strong>给出一个主题:</strong><br> <P><strong>邮件内容:</strong><br> <p><input type="submit" name="submit" value="Send Newsletter"></p> </form> </BODY> -------------------------------------------------------------------------------- header("Location: http://www.yourdomain.com/send_mail.phtml"); }-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- mysql_select_db("yourDB", $db) or die ("不能选择数据库。"); $sql = "select email_addr from subscribers"; $res = mysql_query($sql) or die("不能得到邮件地址。"); $headers = "From: /"Your Mailing List/" <you@yourdomain.com>/n"; 现在进入发送邮件的循环中。首先,使用mysql_fetch_array 函数(或同你的数据库相似的函数)将每 -------------------------------------------------------------------------------- $email_addr = $row[0]; mail("$email_addr", "$subject", $newsletter, $headers); } -------------------------------------------------------------------------------- if (($subject =="") || ($newsletter == "")) { header("Location: http://www.yourdomain.com/send_mail.phtml"); } else { // 连接数据库 mysql_select_db("yourDB", $db) or die ("不能选择数据库。"); $sql = "select email_addr from subscribers"; $res = mysql_query($sql) or die("不能得到邮件地址。"); $headers = "From: /"Your Mailing List/" <you@yourdomain.com>/n"; while ($row = mysql_fetch_array($res)) { $email_addr = $row[0]; mail("$email_addr", "$subject", $newsletter, $headers); } echo "邮件发送完毕!"; |
- 上一篇:简单的用PHP编写的导航条程序
- 下一篇:在线收邮件