我想安排在特定操作时向用户发送电子邮件。但是,如果用户采取其他操作,我想取消该电子邮件并且不发送。
我将如何在 django 或 python 中做到这一点?
如果您可以安装beanstalkd并从命令行运行 python 脚本,我将使用它来安排电子邮件。使用beanstalkc客户端,您可以轻松完成此操作。在 ubuntu 上,您可能首先需要安装:
sudo apt-get install python-yaml python-setuptools
消费者.py:
进口豆茎c
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 秒打印作业。当然,当您要安排电子邮件时,这应该设置得更长,但出于演示目的,它会这样做。您不想在测试时等待半小时来安排消息;)。
生产者.py:
进口豆茎c
def main():
beanstalk = beanstalkc.Connection(host='localhost', port=11300)
jid = beanstalk.put('foo', delay=5)
if __name__ == '__main__':
main()
您还可以使用Google App 引擎任务队列来完成此操作。eta
您可以为您的Task指定一个。Google App 引擎有一个慷慨的免费配额。在任务队列 webhook 中进行异步请求以在您的服务器上获取 URL,该服务器执行电子邮件发送。
我会设置一个 cron 作业,它可以处理你想做的所有事情......
如果您无权访问cron
,则可以轻松执行以下操作:
BooleanField
指示电子邮件是否已发送。HTTP GET
定期发送请求的服务来调用该视图,并触发电子邮件发送。(两者都是免费的,前者应该每 15 分钟请求一次,后者可以配置为最多每分钟请求一次,并且会从多个位置请求。)当然,它不优雅,但它是一种适用于基本上任何网络主机的方法。当我编写 PHP 应用程序以在大约 15 秒后杀死所有进程的主机上运行时,我曾经做过类似的事情。
你说你想通过 Python 或 Django 来做,但似乎需要涉及其他一些事情。考虑到您在共享主机上,安装其他软件包也可能是个问题。
另一种可能的解决方案可能是这样的:
使用可以设置定时事件、启动/取消它们等的 javascript 框架。我使用名为 ExtJS 的框架完成了定时事件。尽管 ExtJS 相当大,但我确信其他框架(例如 jQuery 甚至原始 javascript)也可以做类似的事情。
为用户操作设置一个任务,该任务将在 5 分钟内执行。该操作可能是对发送电子邮件的 python 脚本的 ajax 调用......如果用户在需要停止任务的情况下执行某些操作,只需取消该事件。
这看起来有点复杂和令人费解,但事实并非如此。如果这似乎是您想尝试的路径,请告诉我,我将使用一些代码进行编辑