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中