PHPMailers在从Gmail帐户发送电子邮件方面做得很好。但这需要相当多的时间,在电子邮件发送之前,页面不会显示响应。有什么方法可以在后台发送电子邮件,以便为用户提供更好的用户体验?谢谢!
答案 0 :(得分:10)
它会在需要时触发(避免使用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 &");
-q0-
和&> ... /dev/null &
中的选项来抑制输出并将其作为后台进程调用。第3。相同的脚本文件index.php或其他用于处理队列调用的内容:
这样,它会调用我们的index.php(你可以使用其他名称文件),并处理传出:
if ($_GET['process_email_queue']==1) { ...code for sending idle emails queue... }
也许你必须触及exec()
的一些php.ini选项,这不是什么大问题。
一切正常运行后,您将提供更好的网络导航和电子邮件处理,以实现快速响应和零等待。
在某些情况下,您将从等待直接邮件2.60秒传递到queue-exec-background 0.024秒,速度提高了11倍。
答案 1 :(得分:0)
您可以使用AJAX请求将数据发布到PHP脚本,然后PHP脚本将发送电子邮件。
答案 2 :(得分: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
是最棘手的部分
另外在同一篇文章中,人们建议为此类要求设置玉米作业,但这完全取决于您的要求。你可以
答案 3 :(得分: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()
找到它。
答案 4 :(得分:0)
有许多后台处理软件,如Beanstalkd,GearMan等......
我建议使用beanstalkd,因为它重量轻且简单。轻松创建工作并传递到队列(按照他们的条件管)。
另外一名工人要求继续关注Tube并处理任何工作。
给你一些可能对你有帮助的链接,
实际上还有更多,但我现在不记得名字。
此致