你想实现什么是您使用的存储层上的基本队列。
User (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(125) NOT NULL
);
User_Group (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INTEGER UNSIGNED NOT NULL,
group_id INTEGER UNSIGNED NOT NULL
);
Group (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(75) NOT NULL,
description VARCHAR(255)
)
MailingList (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INTEGER UNSIGNED NOT NULL,
);
# mails to be sent out to groups/all
MailQueue (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
group_id INTEGER UNSIGNED,
time_to_send DATETIME DEFAULT CURRENT_TIMESTAMP
);
你会排队组电子邮件与有效的UNIX时间戳进入在MailQueue条目。您应该创建一个“全部”组,您将分配每个用户,以便您仍然可以正确使用这些表。你会执行您的Cron查询像这样:
SELECT User.email
FROM MailQueue
INNER JOIN User_Group ON (MailQueue.group_id = User_Group.id)
INNER JOIN User ON (User_Group.user_id = User.id)
WHERE MailQueue.time_to_send < NOW();
你需要确保你删除的结果集你作为你不向其发送重复的电子邮件条目之后他们。如果你想保留日志发送的电子邮件,只需添加另一个TINYINT(1) UNSIGNED
字段,表示sent_email = 1
并解决您SELECT
查询只抢的结果,如果值是0
标题写着“调度”,但我读的是关于支持1+收件人。请记住,电子邮件服务器可以对电子邮件进行排队,并且只能以指定的时间间隔发送。 – 2009-12-20 17:39:41