【问题标题】:Best way to do email scheduling on a python web application?在 python Web 应用程序上进行电子邮件调度的最佳方法?
【发布时间】:2011-07-23 19:06:22
【问题描述】:

我有一个 Pyramid Web 应用程序,它需要发送电子邮件,例如注册后的确认电子邮件、新闻通讯等。我知道如何在 python 中使用 smtplib 发送电子邮件,我决定使用 smtp 服务(我认为 sendgrid 可以解决问题)。
真正的问题是电子邮件的调度和延迟发送 - 例如,当用户注册时,电子邮件将在表单发布视图上发送。但是,我不想阻止请求,因此想以非阻止方式“安排”电子邮件。
除了自己实现(可能使用数据库和工作人员)之外,是否有现有的电子邮件队列和调度解决方案?

谢谢!

【问题讨论】:

    标签: python email queue scheduling


    【解决方案1】:

    您参考的现有解决方案是在机器上运行自己的 SMTP 服务器,仅绑定到 localhost 以防止任何其他机器连接到它。由于您是唯一使用它的人,因此向它提交消息应该接近即时,服务器将处理排队、重试等。如果您在 UNIX/Linux 机器上运行,可能已经安装了这样的服务器.

    【讨论】:

    • 谢谢 - 听起来不错。我正在 Mac OS X 上开发,我的应用程序部署在 linux 机器上。但是,似乎我对 smtp 发送的调用仍然处于阻塞状态。此外,如果服务器出现暂时性问题,我的回复将被阻止。我更喜欢非阻塞环境 - 是否有这样的环境(或一种简单的编写方法)?谢谢!
    【解决方案2】:

    在我的应用程序中,我在 DB 表中插入电子邮件,并且我在 cron 下运行 python 脚本来检查该表并发送电子邮件更新记录作为已发送。

    【讨论】:

      【解决方案3】:

      您还可以使用Redis Lists 作为队列来发送电子邮件。创建几个监听 Redis 列表的工作进程,并

      • 通过RPUSH 或 LPUSH 发布电子邮件作业
      • 通过LPOP 或 RPOP 在您的员工处接收工作

      这样您的 Web 应用程序工作进程就不会受到影响,甚至不会感觉到电子邮件发送操作的开销。

      这种设计让您不必关心发送电子邮件需要多长时间。电子邮件服务可以是本地或外部电子邮件服务,但您可以随意。

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 2013-01-06
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        • 2010-11-25
        • 2016-02-09
        • 2010-12-07
        • 2015-02-16
        相关资源
        最近更新 更多