使用任务队列发送电子邮件

时间:2011-07-28 14:07:04

标签: python google-app-engine task-queue

我用Google Task Queue Python API编写了我的第一个代码。每次将URL输入地址栏时,都应该发送一封电子邮件。虽然它在我的仪表板中的default任务队列中显示了一个任务,但我不知道为什么即使在启动它一小时后也没有执行它。

queue-mail.py: -

class sendMail(webapp.RequestHandler):
    def post(self):
        mail.send_mail(
            'X@gmail.com',
        self.request.get('to'),
        self.request.get('subject'),
        self.request.get('body'))


taskqueue.add(url='/sendMail',params=dict(
    to='Y@hotmail.com',
subject = 'Testing task queues',
body = 'this is a message!'))

app.yaml中: -

handlers:
 - url: /mail
   script: queue-mail.py

我将代码调用为:appid.appspot.com/mail

3 个答案:

答案 0 :(得分:3)

请阅读有关how to use the webapp framework的文档部分。您已经定义了一个处理程序类,但是您没有为它定义WSGI应用程序,或者在您的脚本中调用它。因此,您的处理程序代码永远不会运行。

由于您已将代码放入模块级别的任务,并且尚未定义main()函数,因此每次向模块发送请求时,它都将执行该代码 - 因此所有你的代码所做的就是一遍又一遍地排队同样的任务,而不是真正做任何事情。您需要分离代码以将任务从执行它的代码中排队,并将排队代码放在从另一个URL调用的另一个处理程序中。

答案 1 :(得分:1)

看到你的问题解决了,我想我会发一个正式答案。 post get没有工作,因为这是任务队列的默认方法。如果你查看function documentation,其中一个kwargs是方法,你可以在其中指定get / post / etc,但正如你在代码中没有的那样,它默认发布。作为旁注,您可能没有看到404丢失的处理程序,但是405“for not allowed”(因为任务队列试图将post请求发送给没有post函数的处理程序)定义)

答案 2 :(得分:0)

我认为send_mail将任务发送到邮件服务,该服务将发送电子邮件的任务排队。因此,我不确定taskqueue.add()是否会比send_mail()更快。 (假设您的电子邮件任务不进行任何RPC调用等)。