PHPMailers在从Gmail帐户发送电子邮件方面做得很好。 但这需要相当长的时间,在电子邮件发送之前,页面不会显示响应。 有什么方法可以在后台发送电子邮件,以便为用户提供更好的用户体验? 谢谢!

===============>>#1 票数:10

使用电子邮件队列php exec()是最好的方法之一。

它会在需要时触发(避免使用CRON),它很快,因为它被称为背景,并且是立即的。

1.电子邮件队列。 使用插入来获取表的MySQL中的所有字段,例如:

$queryIN="INSERT INTO email_queue (date,subject,body,destination,idle) values (...)";
mysql_query($queryIN);

这很重要,因为您需要一个独立的后台流程,因此注册和审核所有外发电子邮件也是一个好主意。

2. PHP exec()。 在MySQL中插入后是时候调用外部执行:

exec("wget -qO- http://example.com/index.php?process_email_queue=1 &> /dev/null &");
  • 请注意,需要wget -q0-&> ... /dev/null &中的选项来抑制输出并将其作为后台进程调用。

3.相同的脚本文件index.php或其他用于处理队列调用:

这样,它将调用我们的index.php(您可以使用其他名称文件),并处理传出:

if ($_GET['process_email_queue']==1) { ...code for sending idle emails queue...  }

也许你必须为exec()触摸一些php.ini选项,这不是什么大问题。

一切正常运行后,您将提供更好的Web导航和电子邮件处理,以实现快速响应和零等待。

在某些情况下,您将从等待直接电子邮件2.60秒传递到queue-exec-background 0.024秒,这速度提高了11倍。

===============>>#2 票数:0

您可以使用AJAX请求将数据发布到PHP脚本,然后PHP脚本将发送电子邮件。

===============>>#3 票数:0

如果您有兴趣通过异步PHP发送电子邮件,可以查看此答案。 https://stackoverflow.com/a/22627769/829533

<?php
class AsyncEmail extends Thread {

    public function __construct($arg){
        $this->arg = $arg;
    }

    public function run() {
        /** Add your email sending code here. **/
    }
}

// and call this following lines in loop
$aEmail = new AsyncEmail( $arg );
var_dump($aEmail->start());
?>

它使用的是php PECL pthreads库的Thread

请注意 ,为Apache环境设置PECL是最棘手的部分

在同一篇文章中,人们建议根据这些要求设置玉米工作 ,但这完全取决于您的要求。 您可以

  • 创建一个新表来安排电子邮件。
  • 编写一个php脚本,使用新创建表中的详细信息发送电子邮件
  • 设置一个玉米作业以在某个时间间隔运行此脚本

===============>>#4 票数:0

您可以使用exec告诉PHP CLI解释器在后台运行您的脚本。

如果你在linux上:

exec("/path/to/php /path/to/your/mailer/script \"arg1\" \"arg2\" \"arg3\" \"arg4\"  > /dev/null 2> /dev/null &");

如果你在Windows上:

 pclose(popen("start /B /path/to/php /path/to/php/script \"arg1\" \"arg2\" \"arg3\" \"arg4\"","r"));

这要求您的服务器安装了PHP的CLI解释器,并要求您知道PHP二进制文件的路径(如果您不知道,请询问您的主机)。 您还需要知道PHP脚本的绝对路径,您可以使用get_cwd()找到它。

===============>>#5 票数:0

有许多后台处理软件,如Beanstalkd,GearMan等......

我建议beanstalkd因为它重量很轻而且很简单。 轻松创建工作并传递到队列(管他们的条件)。

另外一名工人需要继续关注Tube并处理任何工作。

给你一些可能对你有用的链接,

  1. Beanstalkd
  2. Gearman的

实际上还有更多,但我现在不记得名字了。

问候

  ask by user2335065 translate from so

未解决问题?本站智能推荐: