在这种情况下应该使用什么?

时间:2014-06-19 11:56:45

标签: php email yii cron

以下是“用例”:

管理员转到newsletter.php,填写电子邮件表格,即主题,向其发送电子邮件的用户组,撰写邮件并点击“发送”按钮。

问题:

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

问题:

  1. cron job会不会这样做?
  2. 代码是用Yii框架编写的。当用户单击“发送”按钮或仅在命令行中时,是否可以激活cron作业?
  3. 如果cron作业可以执行上述操作,是否只能在特定控制器的特定操作中激活?或者它会影响整个脚本吗?
  4. 谢谢

6 个答案:

答案 0 :(得分:1)

1 - 是的,这是一项cron工作。

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

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

答案 1 :(得分:0)

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

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

我假设您正在尝试管理托管服务提供商对每小时发送的电子邮件数量(反垃圾邮件控制)所施加的限制

答案 2 :(得分:0)

是的,可以在这种情况下使用cron作业。我个人已经开发了使用这种方法的新系统。但是,我发送350并且每小时做一次cron工作。

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

答案 3 :(得分:0)

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

cron在守护程序的控制下运行。虽然可能可以通过控制器启用和禁用它,但可能不希望这样做。如果您正在使用cron,则通常需要它一直运行。

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

答案 4 :(得分:0)

如果你可以使用system或exec函数你可以调用cron job或者终端中的任何其他东西都可以这样做

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

答案 5 :(得分:0)

我认为你有一个错误的cron工作的概念。

以这种方式思考这个过程:

管理员按下发送按钮。

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

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

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

... cron作业在5分钟后自动重新启动并重复该过程......

您所要做的就是计算每次执行cron作业时要发送的电子邮件数量,以及运行频率的频率,以免超出限制或被标记为垃圾邮件发送者。