0

我正在创建一个邮件列表应用程序。由于邮寄服务的限制,它将每小时发送 40 封电子邮件。如何添加计时器?

4

4 回答 4

3

如果您需要创建计划任务,我建议您创建一个Cron Job

于 2010-09-27T01:22:20.443 回答
1

sleep()您可以使用函数挂起脚本。然而,这不是一个好的解决方案。更好的方法是使用Cron,它允许您每 40 分钟执行一次脚本。脚本本身只需要检查到目前为止已经执行了多少次——这些信息可以存储在某个文件中:

$counter = file_exists('counter') ? file_get_contents('counter') : 1;

echo sprintf('Send %d portion of emails.', $counter);

file_put_contents('counter', ++$counter);
于 2010-09-27T01:26:19.077 回答
0

我发现了这个:http ://swiftmailer.org/docs/throttler-plugin

于 2010-09-27T01:27:33.863 回答
0

一种解决方案是创建一个数据库表来保存您发送的电子邮件的详细信息。假设它看起来像这样:

CREATE TABLE SentEmail (
    email_id INT NOT NULL,
    recipient_id INT NOT NULL,
    time_sent DATETIME NOT NULL,
    PRIMARY KEY (email_id, recipient)
)

这里email_id应该是包含您标记为发送的电子邮件的表的外键,并且recipient_id应该是包含收件人详细信息的表的外键。time_sent显然记录了电子邮件的发送时间。

现在,当您想发送电子邮件时,您会想知道

  • 一小时发送了多少封电子邮件;这可以使用COUNT查询找到
  • 谁已经收到了您当前正在处理的电子邮件;这也是一个简单的查询。

对此的一种可能变化是在表中为您打算发送的每个电子邮件用户组合设置一行,而不是为迄今为止发送的每封电子邮件仅设置一行,并有一列指示该电子邮件是否已发送给该用户. 这样可以很容易地分辨出您还必须向谁发送电子邮件。

正如其他人所建议的那样,您可以将此方法与 Cron 作业相结合,以确保定期处理电子邮件队列。

于 2010-09-27T01:28:44.953 回答