当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

4.3PEAR::Mail_Queue大量邮件批量送信

9/17/2020 9:43:31 PM 人评论

4.3PEAR::Mail_Queue大量邮件批量送信

4.3 PEAR::Mail_Queue大量邮件批量送信

网站的运营时,经常会有要向网站的会员,发送通知、广告等邮件的需要。对网站来说通常少的有几百会员,多的有几万,甚至上百万的会员。大量发送邮件时,通常的邮件发送方式会出现问题,本节提供了应付这种大量发送邮件的应用。其效果界面图如图所示。

alt

本例要点

应用前面章节中介绍的Zend_Mail组件来发送几百,上千件的邮件也是可能的。但是,适时进行大量邮件的发送时,对应用程序来说,负荷太大始终是个大问题。而且,发送过程中,其中的邮件因为某些原因被中断时,也很难追踪。

这里,应用PEAR::Mail_Queue库来进行大批量邮件的发送。使用PEAR::Mail_Queue库时,首先将邮件信息保存在数据库中,然后再将邮件分批送出。这样,你可以自由选择合适的送信时间,例如,选择网站访问相对不频繁的时间带来发送邮件等。另外,发送失败的邮件会在数据库中留下记录,可以择机针对失败的邮件再送信。

数据库的表结构

数据库的表结构如表4-2~表4-3所示。

表4-2 邮件信息(mail_queue)

alt

表4-3 接收邮件地址(mail_list)

alt

表mail_queue(邮件信息)是PEAR::Mail_Queue库运行所必需的表,是用来管理送信邮件的。表的列为了适应PEAR::Mail_Queue库,都是固定的。在进行程序开发前,请务必按照上述结构建好此表。

目录结构

alt

在运行时,请先执行了queuePut.php后,再执行queueSend.php。由queuePut.php向数据库中先登录了邮件内容后,queueSend.php才负责将数据中的邮件送出。

本例代码

alt

以联想数组的形式定义数据库连接时需要的参数。PEAR::Mail_Queue运行时需要的最低限度的参数是:type(连接时使用的库)、dsn(数据库连接字符串)、mail_table(保存邮件的表)。type参数可以指定为db,mdb,mdb2。现在db与mdb不推荐使用,必须指定为mdb2。以下述形式指定数据库连接字符串

alt

MySQL使用的情况下,数据库种类固定为“mysqli”。

alt

以联想数组的形式定义邮件送信时需要的参数。指定的参数有:drive(使用驱动类型)、host(邮件服务器主机名)、port(端口)、auth(认证否)。drive参数除了可以指定为“smtp”(使用SMTP服务器),还可以指定为mail(使用mail函数)、sendmail(使用send-mail命令)。

设置为需要认证的情况下,必须追加username/password参数。

alt

“送信”按钮按下后,17行到43行进行邮件信息的保存处理。

alt

从mail_list表中取出所有的用户邮件地址。

alt

根据检索出的结果集合,生成邮件的头信息。这里设定最低限度的头信息:From,To,Subject。出现多字节字符时,事先应用mb_encode_mimeheader函数进行代码转换。

alt

根据myconfig.php中定义的信息初始化Mail_Queue类。

alt

Mail_Queue类的作用就是来定义邮件信息的。这里,setTXTBody方法用来定义邮件正文的,用get方法取得生成的正文。在使用get方法时请最少指定使用的文字代码(GB2312)。

alt

根据27到32行定义的头信息,生成头字符串。

alt

使用Mail_Queue::put方法向数据库(mail_queue)中登录邮件信息,依次指定put方法的参数:送信邮件地址、接受地址、头信息和正文。put方法执行后只是完成了将邮件保存到数据库中的操作,最后发送还有涉及后面的queueSend.php。

alt

根据myconfig.php中定义的信息初始化Mail_Queue类。

alt

对数据库中保存的邮件进行送信处理。sendMailsInQueue方法的参数中指定了一次送信的邮件数目。

参数省略时,对保存的所有邮件进行送信。但是,有大量的邮件需要送信的情况下,一次性送出时,有可能造成服务器的负荷太大。因此,建议设置一个明确的上限值。

alt

补充

本例需要注意的事项

本节中使用的PEAR::Mail_Queue库,是PEAR提供的库之一,使用前必须进行库的安装。具体的步骤如下:

alt

另外,PEAR::Mail_Queue库依赖的PEAR::MDB2库,在内部使用了mysqli函数(使用MySQL驱动时),根据第1章有关章节介绍的步骤,必须事先使用mysqli函数有效。

邮件送信的自动化

由queueSend.php完成的邮件送信工作,除了通过浏览器进行执行外,也可以设置为定时的自动处理。下面是在Windows环境下生成批处理文件(.bat文件)时,用到的命令:

alt

然后,在Windows环境下,可以应用任务条程序,在Linux环境下,可以应用cron程序进行任务登录,就可以实现定时的自动邮件送信处理。关于任务条与cron程序的使用,请参照本书的官方网站。

相关教程

共有条评论 网友评论

验证码: 看不清楚?