используя очередь задач для отправки электронной почты - PullRequest
1 голос
/ 28 июля 2011

Я написал свой первый код с помощью Python API очереди задач Google.Предполагается отправлять электронную почту каждый раз, когда 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 ]

3 голосов
/ 29 июля 2011

Пожалуйста, прочитайте раздел документации, касающийся как использовать каркас веб-приложения . Вы определили класс обработчика, но не определили для него приложение WSGI или не вызвали его в своем скрипте. В результате ваш код обработчика никогда не будет запущен.

Поскольку вы поместили код для постановки задачи в очередь на уровне модуля и не определили функцию main(), каждый раз, когда запрос отправляется в модуль, он будет выполнять этот код - так что весь ваш код действительно ставит одну и ту же задачу снова и снова, фактически ничего не делая. Вам нужно отделить код для постановки задачи в очередь от кода, который ее выполняет, и поместить код в очередь в другой обработчик, который вы вызываете из другого URL.

1 голос
/ 30 июля 2011

Видя, что ваша проблема решена, я решил опубликовать официальный ответ.post работал, а get - нет, потому что это метод по умолчанию для очереди задач.Если вы посмотрите документацию к функции , один из kwargs - это метод, в котором вы можете указать get / post / etc, но, как вы и не сделали в своем коде, он по умолчанию отправил post.В качестве примечания вы, вероятно, не видите 404 для отсутствующего обработчика, но 405 для «метода не разрешено» (поскольку очередь задач пыталась отправить запрос на отправку обработчику, у которого не было функции postопределены)

0 голосов
/ 28 мая 2014

Я думаю, send_mail отправляет задачу в почтовую службу, которая ставит в очередь задачу отправки электронной почты.Поэтому я не уверен, будет ли taskqueue.add() быстрее send_mail().(при условии, что ваша задача электронной почты не выполняет никаких вызовов RPC и т. д.).

...