在这种情况下应该使用cron作业


is cron job what should be used in this case?

这里是"用例":

管理员转到newsletter.php,填写电子邮件的表单,即电子邮件发送的主题、用户组,编写消息并单击"发送"按钮。

问题:

每小时发送的电子邮件数量应该限制在400封以内。也就是说,大约每10秒就应该发送一封电子邮件。此外,应跟踪已发送和未发送的电子邮件。

问题:

  1. cron job会成功吗
  2. 代码是在Yii框架中编写的。当用户单击"发送"按钮或仅在命令行中单击时,是否可能激活cron作业
  3. 如果cron作业可以做上面的事情,那么它只能在特定控制器的特定动作中被激活吗?还是影响了整个剧本

谢谢

1- 是的,这是一个cron作业。

2- 您可以在Yii中执行此操作,请参阅控制台命令。不知道你对cron了解多少?但是,使用consolecomnd编写一个脚本,该脚本每10秒运行一次,在队列中获得一个单独的电子邮件地址,并将电子邮件发送到该地址+将其从队列中删除。

3- 是的,在操作中只需使用您需要的电子邮件地址构建一个队列(提示:mysql表(

我认为cron作业的概念是错误的。

这样想这个过程:

管理员按下发送按钮。

该脚本创建了一个队列,即将电子邮件地址等添加到数据库表中,并将其称为queue。然后结束。

例如,您将cron作业设置为每5分钟运行一次。

cron启动一个PHP脚本,处理Queue表中的X个条目,发送这些电子邮件,从队列表中删除条目,然后停止。

cron作业在5分钟后再次自动启动,并重复该过程。。。

你所要做的就是计算出在每次执行cron作业时要发送多少封电子邮件,以及运行它的频率,这样你就不会超出限制或被标记为垃圾邮件发送者。

我的建议是,如果你想使用cron来做这样的事情,你会希望你的newsletter.php在磁盘或数据库中写一个包含用户列表的文件。您将编写一个简单的PHP脚本,该脚本将由cron触发,cron将负责调用sendmail来发送消息。当每个收件人都收到邮件时,脚本会将他们从列表中删除。

或者,您可能需要查看一些基本的邮件列表软件。这些通常支持抑制消息发送的概念。

我认为您正试图管理托管提供商对每小时发送的电子邮件数量(反垃圾邮件控制(的限制

Yes cron作业可以在这样的场景中使用。我个人开发了使用这种方法的newletter系统。然而,我发送了350个,每小时做一次cron工作。

你应该检查是否有任何电子邮件要在第一行发送,并让cron作业每小时运行一次。单击发送按钮时无需激活cron作业。

cron本身只是按计划运行程序。它没有任何逻辑可以知道是否有人点击了某个按钮,也没有逻辑可以知道你这一小时发送了多少封电子邮件,或者哪些电子邮件已经发送或没有发送。

cron在守护进程的控制下运行。尽管您可能可以通过控制器启用和禁用它,但您可能不想这样做。如果您使用cron,通常需要它一直运行。

相反,将逻辑和约束放入cron运行的程序中。

如果你可以使用系统或exec函数,你可以调用cron job或终端中的任何其他东西来完成

例如system("ps aux|grep crond"(;