2

目标:实现一个模块化的、可重用的、面向对象的类或包,它将负责自动化用户通知的过程。正如我已经提到的,这些通知是根据一组规则在后台发送给多个用户的。

例如:每次一个新用户注册,并且定义了一条系统消息,并且每个超级用户有10个以上的活跃用户,那么这个系统消息就会发送给所有的用户。

这些“规则”可能会被实现为方法,或者内部带有 SQL 模型的子类。

环境:LAMP,PHP 5.3。首选的实现是 PHP。SendGrid 邮件递送服务 + 他们的官方 PHP 库。

实现(到目前为止我的想法):我考虑过使用 cronjob 或 Apache HTTP worker,问题是这个模型将负责系统的所有电子邮件通知,在这种情况下它必须运行每60秒左右,以确保按时同步交货。要添加或删除 cronjobs,我考虑过使用 PHP 的 exec() 或 system(),尽管我确信有更好的方法,也许直接使用文件函数编辑 cron 作业文件?

问题:任何实现都应该能够与 SendGrid 集成,因为这是我们当前使用的交付系统,并且已被证明是有效的。

这是系统的核心,所以它需要尽可能的防故障,并且具有自我诊断的能力,否则它不会有任何好处,最好直接发送那些电子邮件通知用户访问的页面,以及在加载时间、设计等方面的妥协。

有什么想法吗?,我在正确的方向吗?我一直在寻找已经在 github 和其他网络上实现的东西,但是没有什么能满足我的需要和要求。SendGrid 似乎也没有提供内置队列。

任何帮助深表感谢!。

4

1 回答 1

4

我在 SendGrid 工作。

最强大的解决方案是不在代码中实现队列,而是设置本地邮件服务器并让它管理您的电子邮件队列。然后将该邮件服务器配置为使用 SendGrid 作为提供所有其他功能的智能中继。

这有几个好处:

  • 您的应用程序与本地邮件服务器之间的延迟非常低

  • 您的本地邮件服务器可以管理排队。

  • SMTP 命令流水线减少了协议请求的数量

    我们有邮件服务器的配置指南,可以为您指明正确的方向。

就触发发送到此本地服务器的逻辑而言,我认为您走在正确的轨道上。你可以用 cron 构建一个后台进程系统,或者你可以使用php-resque之类的东西,它可以抽象一些东西,让你从代码中获得更多的控制权。php-resque 或类似的解决方案可能会给您足够的控制权,让您有信心不使用本地 MTA。

于 2013-04-11T23:42:51.707 回答