Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用YiiMail发送密件抄送电子邮件需要很长时间。有没有办法加快速度?_Php_Mysql_Email_Yii - Fatal编程技术网

Php 使用YiiMail发送密件抄送电子邮件需要很长时间。有没有办法加快速度?

Php 使用YiiMail发送密件抄送电子邮件需要很长时间。有没有办法加快速度?,php,mysql,email,yii,Php,Mysql,Email,Yii,我有这个功能,每当管理员发布新公告时,它都会向论坛的所有用户发送电子邮件: $currentid = Yii::app()->db->createCommand("select id from content where id = (select max(id) from content)")->queryRow(); Yii::app()->session['announcement_message'] = 'You have succ

我有这个功能,每当管理员发布新公告时,它都会向论坛的所有用户发送电子邮件:

 $currentid = Yii::app()->db->createCommand("select id from content where id = (select max(id) from content)")->queryRow();
                Yii::app()->session['announcement_message'] = 'You have successfully created an announcement.';

                $url = Yii::app()->createAbsoluteUrl('announcement/view/id/'.  $currentid["id"]);
                if(Yii::app()->partyroles->isAdmin())
                    {
                        $this->emailAll($url);
                    }
                $this->redirect(array('view','id'=>$model->id));
emailAll()是我用来发送邮件的另一个函数,但由于将来可能会有100到1000封邮件,发送速度会很慢!每当我点击“创建”按钮时,通常需要30秒左右才能重定向回查看页面,因为发送所有这些电子邮件需要一段时间


我的问题是,有没有办法加快速度?或者有没有什么聪明的方法可以向用户显示“正在发送电子邮件,请稍候?”

对于如此多的收件人,我不会从创建新闻稿的脚本发送电子邮件,而是将电子邮件和其他信息作为作业写入队列,然后由另一个进程读取(例如,由cron作业触发)使用筛选器生成电子邮件列表,然后发送电子邮件。您可以将带有id的作业存储在队列中,以便在作业完成后使用ajax进行检查


这还将允许您的系统在因某种原因繁忙时安排电子邮件的发送。

我不完全理解您的意思。虽然我知道您的意思,但我不太理解其逻辑。这就是我的功能流程:1.管理员创建帖子2.actionCreate()查询最新数据以获取公告的id并将其存储到$url中。3.actionCreate()调用传递$url的emailAll()函数。4.emailAll()函数发送电子邮件。据我从您那里了解,您的意思是:当管理员创建帖子时,actionCreate()函数当使用单独的功能时,会触发电子邮件列表?@charlesisjan耗时的部分是查询电子邮件地址,将其传递给邮件系统,然后等待邮件系统将邮件写入队列。因此,如果您只存储信息,那么当管理员要求时,应该做什么,以及邮件的消息ts发送帖子,例如在文件或数据库中。然后,您可以在另一个进程中执行实际处理,从文件/数据库中读取作业。因此管理员无需等待30秒即可获得反馈。并且消除了在30秒内可能发生的连接丢失风险(例如超时)。有关于如何在后台运行电子邮件功能的提示吗?我们使用node.js来执行此类任务,但这需要一台您有权安装软件或安装了node.js的服务器。否则,您可以将php作为cli vi、cron作业或服务器支持的任何其他语言启动。有关如何处理大型任务,请参阅此答案邮件Q在Yii中