我正在使用PHPMailer库处理从我的应用程序中发送电子邮件。
问题是,当触发某些电子邮件被发送时(例如提交联系表单,新用户注册等),电子邮件可能需要1-3秒才能加载页面发送。如果发送邮件时出现问题,延迟可能会更长。
我正在考虑将所有需要发送的电子邮件保存到我的数据库中的pending_emails
表中,然后只需要每分钟运行一次cron作业,然后发送所有这些电子邮件,然后将其从表中删除
我的问题是,这看起来像是合乎逻辑的事情吗?对于每分钟运行的cron作业与运行时发送电子邮件相比,我是否应该有任何潜在的资源问题? (我需要经常运行cron作业,因为有人可能正在等待紧急消息,例如“重置密码”电子邮件)
答案 0 :(得分:1)
你已经把一切都搞定了。
在运行时发送,就像您响应用户的HTTP请求一样,是最简单的事情。但当然,这种反应有点慢了。在小型应用程序中,这不是太坏,因为发送电子邮件的速度比人们想象的要快。它确实有效。
当然,实现消息队列是更优雅和可扩展的方法。但它需要更多的工作。您使用pending_emails
数据库表的想法是完全有效的。这些队列有库和组件,但您不必使用它们。
答案 1 :(得分:0)
这是一个非常基于意见的问题,所以你会得到很多不同的,相互矛盾的答案,因为有些人可能会告诉你可以让用户等待1-3秒,因为它不长但我倾向于不同意这一点。但是,我通常使用的是Queue
。
There are ways to create a queue WITHOUT using 3rd party software,但有一些优秀的工具,例如RabbitMQ,Iron.io或Beanstalkd,这些工具对于在后台执行任务非常有帮助。这些服务将您的任务推入队列,队列中的这些项目将在后台中及时处理,但用户几乎立即得到响应(取决于您正在做什么) 。这就是我通常在后台处理更多资源密集型任务(如发送电子邮件)以避免阻止对用户的响应。
祝你好运。答案 2 :(得分:-1)
查看线程(PHP Threading)。我建议你创建一个新的线程,调用发送电子邮件。这样,您可以在不等待发送电子邮件的情况下向用户返回响应,并且电子邮件发送过程将在另一个线程中并行运行。