【问题标题】:PHP-Ajax: Delay bulk email sendPHP-Ajax:延迟批量电子邮件发送
【发布时间】:2016-12-12 13:06:18
【问题描述】:

我有超过 10K 的电子邮件 ID 是我的数据库。我正在尝试使用 php mailer 向他们发送电子邮件。问题是我的托管服务提供商允许每分钟 60 封电子邮件。

所以,我想我需要更改我的电子邮件代码以限制每分钟 60 封电子邮件。

这是我目前写的代码。

$result = $mysqli->prepare("SELECT uid,email FROM users where address IS NULL and city IS NULL");
            $result->execute();
            $result->store_result();
            $result->bind_result($uid,$email);
            while ($result->fetch()){
                   $email = $email;
                   --Code to send email--

                }

我想将 sleep 命令放在 for 循环中,但我在某处读到这是不好的做法。

我检查了这个问题PHP sleep delay

发现我们也可以使用 AJAX。

你可以使用 Ajax。并使用超时每隔几秒钟调用一次您的 PHP 脚本。这将避免缓慢的脚本加载。而且你也可以不断地这样做(当前的 for 循环只会运行 33 秒然后停止)。

有什么建议我可以如何实现 AJAX 或任何其他方式来实现这一点。

【问题讨论】:

  • 而不是使用 sleep 命令,我建议使用每分钟运行一次的 cron 作业,您的脚本将在脚本中仅发送 60 封电子邮件,您可以在数据库中使用一个标志来了解已发送的邮件或不是(您可以取一个数据库字段 is_mail_sent。0 OR 1,0=未发送,1=已发送)。从脚本发送电子邮件时,您可以更新该标志。
  • 按需发送电子邮件。我不必每周定期发送一次。
  • 那么你也可以每周设置一次cron作业。
  • 但是如果我每周设置一次 cron 作业,那么它将一次发送所有电子邮件。我需要限制每分钟 60 封电子邮件。我检查了我可以每周设置一次的 cron 作业,但我怎样才能将其限制为 60 封电子邮件。
  • 您可以按照我在回答中提到的以下步骤进行操作

标签: ajax powershell


【解决方案1】:

您可以按照以下步骤操作

第 1 步:您可以制作一张名为“设置”的表格:其中包含一张 名为“last_email_sent_id”的列

第 2 步:您需要在您的 sql 查询中设置 60 修复限制和 primary_id > 设置表中的“last_email_sent_id”列。

第 3 步:此“last_email_sent_id”将在您每次 cron 作业将运行。如下所示

第 4 步:如果您发送前 60 封电子邮件,那么它将被更新 “last_email_sent_id”到“60”。然后cron将再次运行并按照 “步骤 2” “last_email_sent_id”列将更新为 120 (您使用哪个表存储电子邮件 ID 的主 ID 的最后一个值) cron 完成后。如果表的主 id 将是最后一条记录,则 "last_email_sent_id" 更新为 "0" 值。

第 5 步: cron 将在一周的最后一天每 1 分钟设置一次。

【讨论】:

  • 感谢您的回答。投票赞成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2018-01-17
  • 2010-10-08
相关资源
最近更新 更多