0

I have a web application written in php5.

The application allows users to register and I would like to delay when the various details such as password and links will be sent out. I would like the email containing this information to go 24h after a user has resisted.

How can I to execute the function that will send the email after 24 hours has passed?

4

2 回答 2

0

我会设置处理您的电子邮件队列的数据库表。该表可以有一列指定对应于一封电子邮件的每一行何时排队。您可以运行一个 cron 作业,比如说每隔一小时左右,检查 24 小时是否已过。

email_type   | to             | data
--------------------------------------------------------------------------
registration | fred@stuff.com | {first_name: "Fred", last_name: "Stuff" }

此解决方案很灵活,因为您可能希望将其他类型的电子邮件延迟不同的时间。您可以添加一列来指示电子邮件的类型,并且您的代码以不同方式处理每种类型。

此 cronjob 将每小时运行一次:

0 * * * * php check_mail_queue.php

您可以添加一列以指示是否已发送电子邮件,也可以简单地删除该行。此外,如果您要在每封电子邮件中包含自定义数据,请序列化数组、哈希、字典等,并将其存储到表中的列中。

于 2012-02-17T03:28:47.713 回答
0

这将取决于“24”小时需要多准确,但类似以下方法的方法应该有效。

创建一个表来保存用户注册,或调整现有表来保存一registrationTime列。制作此列 nullable DATETIME,您将使用它来保存用户注册的 HH:MM。新的(或修改的)表还应该包含与电子邮件相关的数据,或用户的通用标识符,以便选择正确的数据。

最后,您将设置一个 cron 作业来查询数据库,x mins并选择y mins24 小时内注册的用户。x您希望作业运行的频率在哪里,并且y对于接近 24:00 的时间有一定程度的容忍度。

对于任何结果,您将构建并发送电子邮件。最后,您将设置一个标志以显示该用户已被处理 - 一个好方法是将registrationTime所有已发送电子邮件的用户设置为 null。

这里有一些链接可以帮助您:

在 SQL Server 中比较时间 如何在 SQL Server 中比较时间?

介绍 Cron http://www.sitepoint.com/introducing-cron/

于 2012-02-17T03:29:26.260 回答