Symfony(PHP) - 在没有队列的情况下在后台发送邮件

时间:2018-02-15 11:47:11

标签: php symfony email

我有一个发送电子邮件的Symfony应用程序。要发送的电子邮件数量很少,我想在不使用队列的情况下发送它们。但是,Swiftmailer大约需要20秒才能执行此操作。它可能是SMTP服务器的限制。我配置Web服务器的能力有限。

我希望PHP脚本向用户发送完整的响应,然后在后台完成eMail的任务。

我尝试了什么?

Swiftmailer内存假脱机没有帮助。函数fastcgi_finish_request不起作用,用户必须等待整个脚本完成。

我也不能分叉脚本。 fork函数被禁用。

2 个答案:

答案 0 :(得分:0)

您可以使用文件假脱机,如here所述:

如果您不想使用队列,则可以异步启动发送电子邮件。您可以创建一个服务来发送您的电子邮件,然后使用krlove/async-service-call-bundle之类的内容异步调用它。

如果您不想使用该捆绑包并自行完成,您可以创建一个命令来阻止您的电子邮件,并使用以下内容进行调用:

$proc_command = 'php bin/console yourcommand > /dev/null 2>&1 &';
$proc = popen($proc_command, 'r');
pclose($proc);

答案 1 :(得分:0)

  

我配置Web服务器的能力有限。

我看到了这个,我担心你无法安装任何东西,但让我分享一下我的想法。

如果您能够将其安装到服务器

,则第一个选项是POSTFIX
  • 它以异步方式发送消息,即无需等待电子邮件 真的发了。所有排队都在postfix
  • 中实现
  • 可以配置为通过外部SMTP服务器发送电子邮件
  • 它有sendmail compatibility interface,因此您可以使用postfix替换系统本机sendmail,并将Swiftmailer配置为使用sendmail作为传输

第二种选择是使用一些云电子邮件服务(通过SMTP或REST API)并希望它能够足够快地运行