Php 来自用户帐户数据库的自动电子邮件

Php 来自用户帐户数据库的自动电子邮件,php,mysql,cron,scheduled-tasks,Php,Mysql,Cron,Scheduled Tasks,我有一个数据库,里面有用户帐户和其他链接到这些用户帐户的信息。我想让用户能够设置自动电子邮件,通知他们新数据已添加到链接到其帐户的各种表中 我不是在寻找完整的代码,而是在这里寻找一个正确的方向。最后一天我一直在寻找和阅读,看到了很多不同的观点 目标是用户定义电子邮件地址和检查新数据的速率。例如,他们提供test@test.com还有15分钟。完成后,我想每隔15分钟检查一次是否有新数据添加到他们的帐户中,如果有,请通过电子邮件通知他们。我在编写实现这一点的实际代码时没有问题,只是不确定在脚本的调

我有一个数据库,里面有用户帐户和其他链接到这些用户帐户的信息。我想让用户能够设置自动电子邮件,通知他们新数据已添加到链接到其帐户的各种表中

我不是在寻找完整的代码,而是在这里寻找一个正确的方向。最后一天我一直在寻找和阅读,看到了很多不同的观点

目标是用户定义电子邮件地址和检查新数据的速率。例如,他们提供test@test.com还有15分钟。完成后,我想每隔15分钟检查一次是否有新数据添加到他们的帐户中,如果有,请通过电子邮件通知他们。我在编写实现这一点的实际代码时没有问题,只是不确定在脚本的调度和自动化方面采用“正确”的方法

  • MySQL take scheduler-我不能使用它,因为它不仅仅是数据库操作。我需要按计划运行php代码(发送电子邮件和其他内容),而不仅仅是在数据库中执行操作

  • Cronjob——我可以做到这一点,但是,这将是一个cron作业,它检查我数据库中的每个用户,并且必须以我提供给用户的最低间隔(1分钟)进行检查。当然,我对数据库的初始查询只会返回它实际需要检查的内容(其中当前时间戳为>上次警报时间戳+速率秒),我认为每分钟在数据库的整个用户集上运行此脚本将是一个性能问题,尤其是随着用户群的增长。使用此选项时,我认为还需要对脚本进行一些文件锁定,以防止脚本多次运行

  • 软件方面-由于数据库与用户在其计算机上安装的软件相关联,我还可以让软件以用户定义的速率间隔“命中”我创建的php脚本。如果他们将它设置为15分钟,那么它将每隔15分钟点击脚本进行检查。这也会起作用,但随着用户群的增长,这是一个极端数量的点击到同一页面相当频繁,因为每个用户帐户都会在其间隔设置中这样做,然而,它也只会发生在软件为该用户运行时,这将减少该数量


话虽如此,有什么建议吗?积极的,消极的,支持和反对一种方法,而不是另一种方法,或者我还没有遇到的其他建议?

我的建议不是以时间为基础,而是每次有新的东西时都发一封电子邮件。类似于当有人在社交网络上评论你的帖子时收到电子邮件。不确定这是否符合您的业务需求。观测者设计模式浮现在脑海中,尽管有很多方法。

忘记软件端,您的检查需要在服务器端驱动

我会使用cron作业来实现这一点。您是对的,您的所有用户只有一个cron作业,但这不是问题


假设您每分钟都有一个cron作业在运行。在cron作业中,第一个任务是根据当前时间和用户定期检查选择查找需要验证是否发生了某些事情的用户。有时,你会找不到要检查的用户,有时是。即使你有很多用户,也不会花很长时间。然后,只通过需要检查的用户进行循环,并在需要时发送电子邮件。

如果您使用您尝试过的代码编写内容,人们会觉得很容易回答。如果您阅读了我发布的内容,说明了。。。正如我所说,我在编写代码时没有任何问题。正确的部分是什么?是cron还是查询将每隔15分钟检查一次?我想指出正确的方向,说明如何处理它。我创建cron也没有问题。。。我指出了我对上述不同选择的一些想法。这个数据库中的用户数量每天都在增长,因此我展望未来/长期,这是实现自动化的最佳方式,不会出现问题。这是我最初的计划,但它可以很容易地同时向任何特定用户发送数百封或更多电子邮件。我决定了一个用户选择的速率,以允许他们减少接收电子邮件的频率(我会将通知排队,然后一次性发送)。费率设置为15分钟,发送电子邮件。。。在接下来的15分钟内,用户将收到50个警报,并排队等待,直到允许再次发送电子邮件)。。。此时,它将发送一封包含50个排队警报的电子邮件。。。。你不认为这会有问题吗?这是我昨晚看到的一篇文章,以及他们在这种方法中遇到的一些问题,这就是为什么我一直拖延下去——为什么不用要发送的消息填充另一个表(或数据库外的消息队列)?也就是说,通过触发器甚至事件调度器。cronjob仅处理此表。查找要验证的用户的查询必须快速。在那之后,如果你需要验证500万用户,因为你的500万用户要求每分钟验证一次他们的帐户,是的,在这种情况下和其他情况下都会有问题。我不知道您为网站计划了什么样的负载,但是数据库中1个用户的新事件验证应该基于索引时间戳,并且要快。@VMai-这是一个有趣的想法。随着警报添加到数据库中。。。如果要通知用户,我会将其添加到一个txt文件中,该文件是数据库中所有用户的当前消息队列。然后cron根本不接触数据库。。。它只是读取txt文件,处理它,然后发送出去。在我的脑海中,阅读txt文件,提取需要发送到另一个文件或数组中的文件,同时从原始txt文件中删除它们。。。新的文件/数组是