[英]How can I schedule an email to be sent at some point in the future in django?
我想安排在特定操作后发送给用户的电子邮件。 但是,如果用户采取了其他操作,我想要取消该电子邮件并让它不发送。
我怎么能在django或python中做到这一点?
如果您可以从命令行安装beanstalkd并运行python脚本,我会使用它来安排电子邮件。 使用beanstalkc客户端,您可以轻松完成此任务。 在ubuntu上,您可能首先需要安装:
sudo apt-get install python-yaml python-setuptools
consumer.py:
import beanstalkc
def main():
beanstalk = beanstalkc.Connection(host='localhost', port=11300)
while True:
job = beanstalk.reserve()
print job.body
job.delete()
if __name__ == '__main__':
main()
将在producer.py插入后5秒打印作业。 当你想要安排电子邮件时,应该将此设置为更长时间,但出于演示目的,它可以执行此操作。 您不希望在测试时等待半小时来安排消息;)。
producer.py:
import beanstalkc
def main():
beanstalk = beanstalkc.Connection(host='localhost', port=11300)
jid = beanstalk.put('foo', delay=5)
if __name__ == '__main__':
main()
您还可以使用Google App引擎任务队列来完成此任务 。 您可以为任务指定eta
。 Google App引擎拥有丰厚的免费配额 。 在任务队列中,webhook使异步请求在您的服务器上获取用于发送电子邮件的URL。
我会设置一个cron工作,可以处理你想做的一切......
如果您无法访问cron
,则可以轻松执行此操作:
BooleanField
。 HTTP GET
请求的服务来调用该视图,并触发电子邮件发送。 (两者都是免费的,前者应该每15分钟请求一次,而后者可以配置为每分钟请求一次,并且将从多个位置请求。) 当然,它不够优雅,但它是一种适用于任何网络主机的方法。 当我编写PHP应用程序以在15秒之后杀死所有进程的主机上运行时,我曾经做过类似的事情。
你在用芹菜吗? 如果为true,请参阅http://ask.github.com/celery/userguide/executing.html#eta-and-countdown
你说你想通过Python或Django来做,但似乎还需要其他东西。 考虑到您在共享主机上,有可能安装其他软件包也可能是个问题。
另一种可能的解决方案可能是这样的:
使用javascript框架可以设置定时事件,启动/取消它们等。我使用名为ExtJS的框架完成了定时事件。 虽然ExtJS相当大,但我确定其他框架,如jQuery甚至原始javascript,你可以做类似的事情。
在用户操作上设置任务,该任务将在5分钟内执行。 该动作可以是对发送电子邮件的python脚本的ajax调用...如果用户执行需要停止任务的事情,则只需取消该事件。
它有点复杂和复杂,但实际上并非如此。 如果这似乎是您想尝试的路径,请告诉我,我将使用一些代码进行编辑
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.