使用phpmailer异步发送电子邮件

9

能否使用phpmailer发送异步电子邮件?

常规的邮件发送代码片段如下:

$mail->Send();

PHP会等待Send()方法返回结果后再继续执行。是否可以让phpmailer立即返回结果,而不必等待实际的电子邮件发送程序完成?

2个回答

8

2016年5月更新

正如用户@Sinak Salek所提到的,PHP确实支持多线程。 可以使用pthreads扩展来实现。

原文

PHP不能本地支持多线程(你需要这样做)。但是,你可以通过将电子邮件保存在数据库中,然后使用另一个脚本稍后处理它们(例如使用cron作业)来实现。这样,你就不必等待底层电子邮件框架。

另外,如果phpmailer速度慢,可能是由于底层邮件程序(sendmail、postfix等)设置不正确。


1
谢谢。在我们的情况下,我们实现了以下异步curl请求到一个仅负责发送电子邮件的php脚本。https://dev59.com/UHNA5IYBdhLWcg3wcNXF - Haluk
不用谢。感谢您提供解决方案的链接,这是一个不错的解决方法 :) - CodeTower
1
PHP确实支持多线程和多进程,通过众所周知的扩展也可以实现。我想这就是你所谓的本地支持,如果是这样的话,连接数据库也需要正确的扩展和许多其他东西。请注意,pthreads扩展实际上非常出名且非常直观易用。 - Sina Salek
@Sina 感谢您的建议。在撰写答案时,我并不知道这些扩展名(即使那时它们已经很出名了,这个答案已经超过3年了)。我会更新答案以反映这一点。 - CodeTower

0

如果你在使用Linux系统,你可以将你的PHP脚本放在一个exec命令中,并在后台启动它(在命令的末尾加上&符号),并且以静默模式运行(2>&1 >/dev/null)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接