在php5网络应用程序中,从用户那里获取电子邮件地址并将其粘贴到数据库中,但希望在没有用户等待电子邮件完成的情况下发送电子邮件。使用Gmail,有时需要几秒钟。
考虑fopen( "http://self.com/mailer.php", "r" )
,其中mailer.php
将执行实际邮件。这会有用吗?
答案 0 :(得分:1)
过去有两种方法对我有用。
数据库电子邮件队列
在数据库中创建“email_queue”表或用于持久存储的其他任何内容。每个条目都包含发送电子邮件所需的一切(例如主题,收件人,发件人,正文......等)和“已发送”标志字段。要发送电子邮件,请使用帮助程序类向此表添加条目。
然后你创建一个cli php脚本,从队列表中读取过滤发送标志设置为0的条目,发送电子邮件,最后将发送标志设置为1.此脚本需要在cron作业中运行,但由于你可能想要经常运行它超过一分钟,你可以使用Frequent-cron之类的东西。计划任务应该只在一个Web服务器上运行,以防您有多个(并假设您的永久存储是共享的)。
本地电子邮件队列
我在每个Web服务器上配置本地后缀服务器以使用外部smtp服务传递邮件方面也取得了一些成功。这里的目标是让postfix尽可能快地接受电子邮件(因为它是本地的),然后通过外部SMTP服务器在不同的进程中传递它。 Postfix将充当中间队列。
我个人喜欢第一个解决方案,因为它为您的应用提供了有关电子邮件传送的更多信息,用于统计分析,记录保存等。
希望有所帮助。