2010-09-27 2 views

ответ

3

Если вам нужно создать запланированную задачу, я бы предложил создать Cron Job.

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); 
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, как это было предложено другими, чтобы убедиться, что очередь сообщений электронной почты рассматривается регулярно.