Gar*_*hby 2 php email asynchronous feedback
是否可以使用PHP发送邮件,同时在交付时提供实时用户反馈?
我最近为我们公司的内部网编写了一个小应用程序,用于向客户发送格式化的电子邮件.界面非常干净,只需要输入一个作业号,然后构建并发送邮件.邮件在构建时从另一台服务器获取许多附件,一切都是自动化的.使用的库是PHPMailer.
有没有办法,使用其他技术,但仍然使用PHP作为主要语言,来显示发送邮件的进度?我编写了强大的错误检查来检查邮件是否实际发送等等,但我错过了一种方法,即通过进度条等方式向用户提供实际将邮件发送到服务器的直观线索.
这可能是使用PHP和类似Ajax的东西吗?您如何确定邮件的传输进度?
我不熟悉PHPMailer,但你肯定需要支持库才能查询它发送的电子邮件的状态.
鉴于PHP没有线程,我建议有一个数据库队列进行交付,并从主站点(或通过cron)触发外部PHP进程处理侧面的交付,在数据库上标记当前状态每次交付时:NOT_PROCESSED,IN_PROGRESS,CONNECTING,CONNECTED,SENDING_DATA,ACCEPTED,FAILURE_X.您可以通过Ajax在数据库中查询每次交付的状态.
如果PHPMailer在内部使用标准的PHP mail()函数,该函数在您的机器中使用中继SMTP服务器,则您无法获得有关状态的更多信息(如果您自己创建了套接字,则可能会有这些信息),您可以只有三个主要状态NOT_PROCESSED,IN_PROGRESS,FAILURE_X.
(FAILURE_X确实代表了许多州,因为它解释了失败的原因).
关于使用mail()的最后一个考虑因素是,您将能够知道的状态只是来自本地SMTP中继的状态,它将始终非常快速地接受,并且您将无法判断邮件是否真的传递到传出服务器(至少不必与它接口或读取mailq,这是令人讨厌的事情).
免责声明
鉴于即使在您知道真实状态的情况下,您也无法知道电子邮件是否已在另一端收到,也不知道需要多长时间,我不确定这样的结构会有多大用处.编程当然很有趣,但我怀疑它是否真的有用,也许只是一些标准的电子邮件免责声明(电子邮件可能在运输中丢失,如果再次尝试失败,在重试之前离开)就足够了.
| 归档时间: |
|
| 查看次数: |
2871 次 |
| 最近记录: |