我发现很难在Django中安排电子邮件。我一直在互联网上进行研究,但还未能解决这个问题。也许你可以帮我解决这个问题,或者至少指出我正确的方向,找出如何做到这一点。
例如,当您使用Mailgun时,您可以指定发送如下电子邮件:
def send_scheduled_message():
return requests.post(
"https://api.mailgun.net/v2/samples.mailgun.org/messages",
auth=("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0"),
data={"from": "Excited User <me@samples.mailgun.org>",
"to": "bar@example.com",
"subject": "Hello",
"text": "Testing some Mailgun awesomness!",
"o:deliverytime": "Fri, 25 Oct 2011 23:10:10 -0000"})
我想在Django上发送类似的东西来发送电子邮件,我可以指定交货时间,就像之前的情况一样。
到目前为止,我已经安装了django-SES,我可以通过Amazon SES发送电子邮件。我还安装了Celery并且过去常常使用django-celery,但似乎不再需要从Celery 3.1开始。
总而言之,我如何使用send_mail
告诉Celery等待特定日期和时间将电子邮件发送到django-SES以便他们按时交付?
谢谢你的帮助!
答案 0 :(得分:2)
编写Python脚本并安排cron作业:)为什么应用程序服务器需要了解电子邮件工作?如果是,请通过具有ACID合规性的共享数据存储进行通知。
这些想法被封装在一个非常好的架构实践中,separation of mechanism from policy。
基本上我们有以下内容:
当然,有时候不能完全分离,但是部分分离比紧密耦合更好。最好的部分是它们中的每一个也相互分离(大多数情况下,除了可能通过互联网或操作系统)。
对于一些复杂的问题,芹菜是一个非常大的锤子,应该避免使用大锤子恕我直言。 Django在某种程度上也是一个大锤子,它解决了许多更简单的问题,但是以一种适合一大群人的方式(我认为它试图解决的真正问题,但你必须判断或者不是适合当前工作的合适工具。)完成上述步骤后,每个步骤都是非常直接的任务,您将拥有一个易于理解的独立部分,因此易于修改,扩展和替换。
答案 1 :(得分:2)
基本上,我同意Derek Litz的回答。但是,根据您的要求,您可能希望查看使用cron + Django管理命令。如果这是一个非常简单的基于文本的电子邮件,那么我可能会选择Derek的解决方案。但是,如果电子邮件是基于HTML的,或者需要为每个用户提供动态,那么我可能会利用django模型和模板引擎的强大功能。我经常这样做,效果很好。