2013-04-10 91 views
2

目标: 实现模块化,可重用,面向对象的类或包,负责自动执行用户通知过程。 这些通知按照一定的规则集发送给多个用户,如前所述。例如:每当新用户注册并且定义了系统消息,并且每个超级用户有超过10个活动用户时,则将该系统消息发送给所有用户。如何实现可轻松与SendGrid集成的邮件队列

这些'规则'可能会被实现为方法或其中的SQL模型的子类。

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

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

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

这是系统的核心,所以它需要尽可能的防故障,并且有自诊断能力,否则没有什么好的结果出来,最好是将它们发送出去电子邮件通知直接通过用户访问的网页,并在加载时间,设计等方面妥协。

任何想法?,我是在正确的方向呢? 我一直在寻找已经在github和其他网络上实现的东西,但没有任何东西符合我的需求和要求。 SendGrid也似乎不提供内置队列。

任何帮助非常感谢!

回答

3

我在SendGrid工作。

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

这样做有几个好处:你的应用服务器 你的本地邮件服务器可以管理队列之间的本地邮件

    • 非常低的延迟。
    • SMTP命令流水线减少协议的请求数

      我们有​​,可以指向你在正确的方向。

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

  • +0

    这是一个很好的建议,但如果我们在没有任何特定本地SMTP服务器的Azure上运行我们的应用程序,该怎么办?你认为我们应该在这种情况下做什么? – 2015-03-11 14:44:56

    +1

    嗨@RobertKoritnik,我会推荐实现一个队列服务https://msdn.microsoft.com/en-us/library/azure/hh767287.aspx来处理这个:) – bwest 2015-03-17 15:08:01