использование очереди задач для отправки электронной почты

Я написал свой первый код с Google Task Queue Python API. Предполагается, что каждый раз, когда URL-адрес вводится в адресную строку, отправляется электронное письмо. Хотя он показывает задачу в очереди задач default на моей панели инструментов, я не знаю, почему она не выполняется даже через час после ее запуска.

очередь-mail.py: -

class sendMail(webapp.RequestHandler):
    def post(self):
        mail.send_mail(
            '[email protected]',
        self.request.get('to'),
        self.request.get('subject'),
        self.request.get('body'))


taskqueue.add(url='/sendMail',params=dict(
    to='[email protected]',
subject = 'Testing task queues',
body = 'this is a message!'))

приложение.yaml: -

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

Я вызвал код как: appid.appspot.com/mail


person haltTm    schedule 28.07.2011    source источник
comment
Когда я нажимаю «Выполнить сейчас». Он отображает баннер о том, что команда запуска успешно выполнена. Но я все еще не получаю почту.   -  person haltTm    schedule 28.07.2011
comment
Это на локальном сервере разработки или на рабочем сервере? Вы проверили свои журналы на наличие исключений? В качестве примечания, я не уверен, что это неправильный формат, но отступ в вашем методе sendMail неверен, mail.send_mail должен иметь больший отступ под post   -  person waffle paradox    schedule 28.07.2011
comment
Производственный сервер. Отступ правильный в коде, который я развернул. Я включил то же самое в код, который я написал здесь.   -  person haltTm    schedule 28.07.2011
comment
Вы определили обработчик для URL /sendMail? Я не вижу этого в вашем app.yaml.   -  person waffle paradox    schedule 28.07.2011
comment
Нужно ли определять обработчик, когда URL-адрес совпадает с именем класса? Я делал это раньше, но столкнулся с теми же проблемами. Я удалил его, чтобы сделать мой код компактным.   -  person haltTm    schedule 28.07.2011
comment
да. В настоящее время ваша команда taskqueue.add(url='/sendMail' ... отправляет запрос на URL-адрес /sendMail; как будет выполняться задача, если ваше приложение не знает, что делать с этим URL-адресом? Проверьте свои производственные журналы на наличие исключений, это может оказаться полезным.   -  person waffle paradox    schedule 28.07.2011


Ответы (3)


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

person waffle paradox    schedule 30.07.2011
comment
почему self.response.get работает даже в методе post. Это две независимые вещи? Есть ли способ увидеть живые журналы. Они задерживаются примерно на полчаса, я думаю. - person haltTm; 01.08.2011
comment
Вы имеете в виду self.request.get? Функция get не относится к методу http, это просто общая вещь Python для получения значений. Полезно сделать self.request.get(x, None), который вернет None, если x не существует (или какое-то другое значение по умолчанию, которое вы хотите). Журналы на вашей консоли активны; они не задерживаются или что-нибудь вообще. - person waffle paradox; 01.08.2011


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

person robert king    schedule 27.05.2014