我有这个功能,只要管理员发布新公告,它就会向论坛的所有用户发送一封电子邮件:
$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秒才会重定向回到视图页面,因为它需要一段时间才能发送所有这些电子邮件。
我的问题是,是否有办法加快速度?或者是否有任何聪明的方法可能向用户显示“正在发送电子邮件,请稍候?”
答案 0 :(得分:1)
对于这么多收件人,我不会从创建新闻稿的脚本发送电子邮件,而是将电子邮件的过滤器和作为作业的其他信息写入队列,然后读取通过另一个进程(例如由cron作业触发),使用过滤器构建电子邮件列表,然后发送电子邮件。您可以将具有ID的作业存储在队列中,以便您可以使用例如ajax如果工作完成了。
如果出于某种原因,系统会另外允许您的系统安排发送电子邮件。