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