在Python web应用中最佳的邮件调度方式是什么?

0 投票
3 回答
538 浏览
提问于 2025-04-16 22:09

我有一个Pyramid的网页应用,需要发送一些邮件,比如注册确认邮件、新闻通讯等等。我知道怎么用Python里的smtplib发送邮件,并且我决定使用一个smtp服务(我觉得sendgrid可以满足需求)。
真正的问题是邮件的调度和延迟发送——比如,当用户注册时,邮件应该在表单提交后发送。但我不想让这个请求被阻塞,所以我想以一种不阻塞的方式“安排”邮件的发送。
除了自己实现这个功能(可能需要用到数据库和工作线程),有没有现成的解决方案可以处理邮件队列和调度呢?

谢谢!

3 个回答

0

你还可以使用Redis 列表来作为一个队列,用来发送邮件。你可以创建几个工作进程,这些进程会监听一个 Redis 列表,

  • 通过RPUSH或LPUSH来发布一个邮件任务
  • 通过LPOP或RPOP在你的工作进程中接收这个任务

这样,你的网页应用的工作进程就不会受到影响,甚至不会感觉到发送邮件的额外负担。

这种设计让你不需要关心发送邮件需要多长时间。邮件服务可以是本地的,也可以是外部的邮件服务,随你选择。

0

你提到的现有解决方案是,在你的电脑上运行一个自己的SMTP服务器,这个服务器只绑定在本地,也就是只能自己用,其他机器无法连接。因为只有你一个人在用,所以发消息到这个服务器几乎是立刻就能完成的,服务器会处理消息的排队、重试等问题。如果你是在UNIX/Linux系统上,可能已经有这样的服务器安装好了。

0

在我的应用程序中,我把电子邮件插入到数据库表里。同时,我有一个Python脚本在定时任务下运行,它会检查这个表,并把已发送的邮件记录更新为“已发送”。

撰写回答