2

我想安排在特定操作时向用户发送电子邮件。但是,如果用户采取其他操作,我想取消该电子邮件并且不发送。

我将如何在 django 或 python 中做到这一点?

4

5 回答 5

4

豆茎

如果您可以安装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()

GAE 任务队列

您还可以使用Google App 引擎任务队列来完成此操作。eta您可以为您的Task指定一个。Google App 引擎有一个慷慨的免费配额。在任务队列 webhook 中进行异步请求以在您的服务器上获取 URL,该服务器执行电子邮件发送。

于 2011-01-19T04:04:27.203 回答
3

我会设置一个 cron 作业,它可以处理你想做的所有事情......

于 2011-01-19T03:56:07.717 回答
2

如果您无权访问cron,则可以轻松执行以下操作:

  1. 编写一个模型来存储电子邮件、发送时间以及BooleanField指示电子邮件是否已发送。
  2. 编写一个视图,选择所有尚未发送但现在应该发送的电子邮件,然后发送它们。
  3. 使用类似OpenACS UptimePingdom或任何其他能够HTTP GET定期发送请求的服务来调用该视图,并触发电子邮件发送。(两者都是免费的,前者应该每 15 分钟请求一次,后者可以配置为最多每分钟请求一次,并且会从多个位置请求。)

当然,它不优雅,但它是一种适用于基本上任何网络主机的方法。当我编写 PHP 应用程序以在大约 15 秒后杀死所有进程的主机上运行时,我曾经做过类似的事情。

于 2011-01-19T10:37:46.633 回答
0

你说你想通过 Python 或 Django 来做,但似乎需要涉及其他一些事情。考虑到您在共享主机上,安装其他软件包也可能是个问题。

另一种可能的解决方案可能是这样的:

使用可以设置定时事件、启动/取消它们等的 javascript 框架。我使用名为 ExtJS 的框架完成了定时事件。尽管 ExtJS 相当大,但我确信其他框架(例如 jQuery 甚至原始 javascript)也可以做类似的事情。

为用户操作设置一个任务,该任务将在 5 分钟内执行。该操作可能是对发送电子邮件的 python 脚本的 ajax 调用......如果用户在需要停止任务的情况下执行某些操作,只需取消该事件。

这看起来有点复杂和令人费解,但事实并非如此。如果这似乎是您想尝试的路径,请告诉我,我将使用一些代码进行编辑

于 2011-01-19T22:23:54.283 回答
0

你用芹菜吗?如果为真,请参阅http://ask.github.com/celery/userguide/executing.html#eta-and-countdown

于 2011-01-19T03:54:06.683 回答