目录
订阅/退订
Send a Newsletter
首页 php教程 php手册 管理小型的邮件列表

管理小型的邮件列表

Jun 21, 2016 am 09:09 AM
check email gt lt quot

邮件列表

首先是订阅/退订脚本,它所做的工作就是从数据库表中增加或删除记录。把它叫做"manage.phtml" 或
差不多的什么东西。这样呢,就需要后台是某种数据库,在上面可以创建订阅表。根据政治中的半数原则,
所以我将使用MySQL作为这个例子的数据库。你可以使用任何你常用的数据库,只是根据PHP手册替换正确的
数据库相关函数。

  在我的订阅表中,我使用了两个字段:邮件地址(email_addr)和添加日期(date_added)。你可以根据需
要增加字段,或者将date_added字段删除。在这个例子中,我只是向你展示我做了什么,你可以适当的进行
修改。在我的订阅表中,email_addr字段是一个不重复字段,意味着你不能增加另一个与之完全一样的e-mail
地址。这个可以避免重复订阅,而且当用户想退订时,也使删除记录的方法变得简单和可靠。

  那么,让我们创建订阅/退订表单吧(manager.phtml或你想起的什么名字)。我使用同一个文件处理订
阅和退订,也包括表格自身的动作,所以可能有点复杂。我将从头到尾讲解,然后把所有的片段组合在一起,
放在一个表单中。

  在脚本的开始处,是打开数据库和准备时间戳。在开始时处理这些不显眼的东西总是可以为我减轻一点
压力。

--------------------------------------------------------------------------------
// 连接数据库
$db = mysql_connect("servername", "username", "password") or die ("不能连接。");

mysql_select_db("yourDB", $db) or die ("不能选择数据库。");

// 得到时间戳
$add_date = date("Y-m-d"); --------------------------------------------------------------------------------
  我们希望$op的值是"ds"。它不是复杂的程序缩写----我创的,表示"do something(做某事)" 。所以,
脚本的第一件事就是查看$op的值是不是等于"ds"。这个值只有当表单被提交后才会被发送上来。所以如果
$op的值不是"ds",那么说明用户还没有看过表单,所以应该把表单显示出来:

--------------------------------------------------------------------------------
if ($op != "ds") {

//需要订阅/退订

$text_block = "




your e-mail address:



action:

sub
unsub






";

}--------------------------------------------------------------------------------
  你会注意到我把文本放在$text_block变量中。通过把文本放在一个变量中,接下来我所要做的就是在
后面在主HTML模板内输出$text_block的值。这是个人习惯问题,你可以根据你喜欢的时间和方式输出文本。

  这个表单的动作是$PHP_SELF ,可以想象一下,它的意思就是当按下了提交按钮之后,它将会被重新装
入。然后,你可以看到这个表单有三个字段:一个隐藏字段,用于给$op赋值为"ds" ;一个文本字段,叫做
"email",在这里用户将填入他或她的email地址;还有一个是单选按钮集,叫做"action",根据它,用户可
以决定执行哪一个动作(订阅或退订)。

  在表单被提交之后,$op将等于"ds",并且$action的值将包含"sub"或"unsub"。那么,我们继续看上面
的if...语句,一旦提交,它将被跳过(因为$op=="ds")。如果$op的值为"ds"并且$action的值"sub"(订阅),
下面的else if...句被执行。这段代码检查e-mail是否已经存在于订阅表中,如果不存在则将其插入到表中
并打印出响应,否则忽略。

--------------------------------------------------------------------------------
else if (($op == "ds") && ($action == "sub")) {

// 检查邮件还未提交则提交它们,否则返回信息

$check = "select email_addr from subscribers
where email_addr = \"$email\"";

$check_result = mysql_query($check)
or die("不能执行地e-mail地址的检查。");

$check_num = mysql_num_rows($check_result);


if ($check_num == 0) {

// 如果$check_num为0,则没有找到匹配的记录,用户应该被提交

$sql = "insert into subscribers
values(\"$email\", \"$add_date\")";

@mysql_query($sql) or die ("Couldn't insert email.");

$text_block = "

感谢您的注册!


";

} else {

// 如果$check_num不为0,则用户已经提交过了,你应该让他们知道

$text_block = "

你已经订阅过了!


";

}

}--------------------------------------------------------------------------------
  下一步:当$action的值为"unsub"(unsubscribe,退订)而不是"sub"时应该做些什么。好,就象上面
一样简单,那么对else if...语句扩展一下,多加一块代码,用于检查e-mail在被删除前是否存在于订阅表
中,如果存在则删除它并且打印响应,否则忽略它。

--------------------------------------------------------------------------------
else if (($op == "ds") && ($action == "unsub")) {

// 检查已经订阅过,然后将他们退订,否则返回信息

$check = "select email_addr from subscribers
where email_addr = \"$email\"";

$check_result = mysql_query($check)
or die("不能执行对e-mail地址的检查。");

$check_num = mysql_num_rows($check_result);

if ($check_num == 0) {

// 如果$check_num为0,则没有找到匹配记录,用户不能被退订

$text_block = "

不能在列表中找到你的e-mail地址!


你还没有被退订,因为你所输入的e-mail不在数据库中。";

} else {

// 如果$check_num不为0,则用户在列表中,所以可以被退订

$sql = "delete from subscribers
where email_addr = \"$email\"";

@mysql_query($sql) or die ("不能删除email。");

$text_block = "

退订成功!


";
}

}

?>--------------------------------------------------------------------------------
  现在所有艰难的工作已经做完了,只剩下在一块HTML中输出$text_block变量了:

--------------------------------------------------------------------------------



订阅/退订




订阅/退订







--------------------------------------------------------------------------------
  下面是完整的程序清单:

--------------------------------------------------------------------------------


// 连接数据库
$db = mysql_connect("servername", "username", "password")
or die ("不能连接。");

mysql_select_db("yourDB", $db) or die ("不能选择数据库。");

// 得到时间戳
$add_date = date("Y-m-d");

if ($op != "ds") {

//需要订阅/退订

$text_block = "




your e-mail address:



action:

sub
unsub






";
} else if (($op == "ds") && ($action == "sub")) {

// 检查邮件还未提交则提交它们,否则返回信息

$check = "select email_addr from subscribers
where email_addr = \"$email\"";

$check_result = mysql_query($check)
or die("不能执行地e-mail地址的检查。");

$check_num = mysql_num_rows($check_result);


if ($check_num == 0) {

// 如果$check_num为0,则没有找到匹配的记录,用户应该被提交

$sql = "insert into subscribers
values(\"$email\", \"$add_date\")";

@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
where email_addr = \"$email\"";

$check_result = mysql_query($check)
or die("不能执行对e-mail地址的检查。");

$check_num = mysql_num_rows($check_result);

if ($check_num == 0) {

// 如果$check_num为0,则没有找到匹配记录,用户不能被退订

$text_block = "

不能在列表中找到你的e-mail地址!


你还没有被退订,因为你所输入的e-mail不在数据库中。";

} else {

// 如果$check_num不为0,则用户在列表中,所以可以被退订

$sql = "delete from subscribers
where email_addr = \"$email\"";

@mysql_query($sql) or die ("不能删除email。");

$text_block = "

退订成功!


";
}

}
?>




订阅/退订




订阅/退订







--------------------------------------------------------------------------------
  现在你已经有了合适的订阅/退订机制,我将向你展示如何发出一封新闻信件,只使用一个简单的表单
和一个邮件脚本。("while"循环是你的好朋友!)。首先,是名为"send_mail.html"的表单。表单的动作
应该是象"do_send_mail.phtml"的什么东西,并且我只使用了一个用来写主题的文本字段(subject)和一个
写信件内容的文本域字段(newsletter)。你可以根据需要使用表单字段,只要适当地修改表单和脚本。

--------------------------------------------------------------------------------



发送邮件




Send a Newsletter





给出一个主题:



邮件内容:









--------------------------------------------------------------------------------
  最后一点说明的是关于表单的动作,这个脚本叫做"do_send_mail.phtml"。脚本首先查找$subject和
$newletter的值,并且如果他们的值有一个为空就重定向到表单:

--------------------------------------------------------------------------------
if (($subject =="") || ($newsletter == "")) {

header("Location: http://www.yourdomain.com/send_mail.phtml");
exit;

}--------------------------------------------------------------------------------
  接着,连接到数据库并且从订阅表中取出邮件地址:

--------------------------------------------------------------------------------
// 连接数据库
$db = mysql_connect("servername", "username", "password")
or die ("不能连接。");

mysql_select_db("yourDB", $db) or die ("不能选择数据库。");

$sql = "select email_addr from subscribers";

$res = mysql_query($sql) or die("不能得到邮件地址。");
--------------------------------------------------------------------------------
  在进入到发送邮件信息的循环之前,要建立额外的邮件头。在这里,我只用了"From:"行:

$headers = "From: \"Your Mailing List\" \n";


  现在进入发送邮件的循环中。首先,使用mysql_fetch_array 函数(或同你的数据库相似的函数)将每
条记录放在一个数组中。如果你取回的字段多于一个可能更有意义,我用它是因为它快。下面的语句对结果
集进行遍历并且通过mail()函数对每个在列表中的邮箱发送e-mail:

--------------------------------------------------------------------------------
while ($row = mysql_fetch_array($res)) {

$email_addr = $row[0];

mail("$email_addr", "$subject", $newsletter, $headers);

}
--------------------------------------------------------------------------------
  $subject和$newletter的值是在前面的表单中输入的。在脚本的最后增加一行输出语句,以便你知道执
行完毕了。这就是全部处理了!完整的"do_send_mail.phtml"脚本看上去为:

--------------------------------------------------------------------------------


if (($subject =="") || ($newsletter == "")) {

header("Location: http://www.yourdomain.com/send_mail.phtml");
exit;

} else {

// 连接数据库
$db = mysql_connect("servername", "username", "password")
or die ("不能连接。");

mysql_select_db("yourDB", $db) or die ("不能选择数据库。");

$sql = "select email_addr from subscribers";

$res = mysql_query($sql) or die("不能得到邮件地址。");

$headers = "From: \"Your Mailing List\" \n";


while ($row = mysql_fetch_array($res)) {

$email_addr = $row[0];

mail("$email_addr", "$subject", $newsletter, $headers);

}

echo "邮件发送完毕!";
}
?>



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

解决kernel_security_check_failure蓝屏的17种方法 解决kernel_security_check_failure蓝屏的17种方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure(内核检查失败)就是一个比较常见的停止代码类型,可蓝屏错误出现不管是什么原因都让很多的有用户们十分的苦恼,下面就让本站来为用户们来仔细的介绍一下17种解决方法吧。kernel_security_check_failure蓝屏的17种解决方法方法1:移除全部外部设备当您使用的任何外部设备与您的Windows版本不兼容时,则可能会发生Kernelsecuritycheckfailure蓝屏错误。为此,您需要在尝试重新启动计算机之前拔下全部外部设备。

华为GT3 Pro和GT4的差异是什么? 华为GT3 Pro和GT4的差异是什么? Dec 29, 2023 pm 02:27 PM

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

Python如何使用email、smtplib、poplib、imaplib模块收发邮件 Python如何使用email、smtplib、poplib、imaplib模块收发邮件 May 16, 2023 pm 11:44 PM

一封电子邮件的旅程是:MUA:MailUserAgent——邮件用户代理。(即类似Outlook的电子邮件软件)MTA:MailTransferAgent——邮件传输代理,就是那些Email服务提供商,比如网易、新浪等等。MDA:MailDeliveryAgent——邮件投递代理。Email服务提供商的某个服务器发件人->MUA->MTA->MTA->若

修复:截图工具在 Windows 11 中不起作用 修复:截图工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

如何在Windows 11/10中关闭Palm Check 如何在Windows 11/10中关闭Palm Check Feb 19, 2024 pm 09:45 PM

本文将指导您在Windows11/10PC上关闭PalmCheck功能。PalmCheck是一项设计用来防止在键盘输入时意外手掌或其他部位的触摸被误识别为输入的功能。通常可以在触摸板设置中找到,特别是在笔记本电脑等设备上具有触摸功能的设备。有时候,您可能需要关闭PalmCheck或类似的功能,以便在需要同时使用键盘和触摸板的情况下更加灵活地控制输入。在本文中,我们将介绍如何在Windows11/10PC上禁用PalmCheck功能,让您能够更好地应对游戏或运行应用程序时的需求。什么是触摸板上的P

如何修复无法连接到iPhone上的App Store错误 如何修复无法连接到iPhone上的App Store错误 Jul 29, 2023 am 08:22 AM

第1部分:初始故障排除步骤检查苹果的系统状态:在深入研究复杂的解决方案之前,让我们从基础知识开始。问题可能不在于您的设备;苹果的服务器可能会关闭。访问Apple的系统状态页面,查看AppStore是否正常工作。如果有问题,您所能做的就是等待Apple修复它。检查您的互联网连接:确保您拥有稳定的互联网连接,因为“无法连接到AppStore”问题有时可归因于连接不良。尝试在Wi-Fi和移动数据之间切换或重置网络设置(“常规”>“重置”>“重置网络设置”>设置)。更新您的iOS版本:

解读Linux 系统Keepalived健康检查机制 解读Linux 系统Keepalived健康检查机制 Feb 28, 2024 am 09:52 AM

在进行负载均衡时,一般都会部署一个健康检查工具,确保后端realserver是正常的,可以提供服务的,避免出现后端realserver已经宕机或服务不可用时,负载均衡器扔将请求分发到realserver,影响整体业务访问。健康检查的方式有很多,可以自行部署脚本,当然当前用的比较多的就是keepalived服务了。keepalived的健康检查方式有三种,tcp_check、http_check、misc_check。keepalived配置简述keepalived主要有三个模块,分别是core、

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

See all articles