Google App Engine с Django - InboundMailHandler работает только один раз - PullRequest
3 голосов
/ 29 августа 2010

Я пишу приложение для Google App Engine (с Python и Django), которое должно получать электронную почту и добавлять некоторые элементы полученных сообщений электронной почты в хранилище данных. Я очень начинающий программист.

Проблема в том, что указанный мной сценарий для обработки входящей электронной почты запускается только один раз (до тех пор, пока сценарий не будет затронут).

Отправка тестового электронного письма из локальной консоли администратора, скажем, на «test@downloadtogo.appspotmail.com» приводит к правильному добавлению объекта в локальное хранилище данных.

Отправка второго, третьего и т. Д. Тестового электронного письма не имеет никакого эффекта - объект не добавляется.

«Касание» handle_incoming_email.py (что, как я понимаю, означает добавление или удаление пробела, а затем сохранение), , а затем отправка другого тестового электронного письма, приведет к правильному добавлению объекта.

app.yaml:

application: downloadtogo
version: 1
runtime: python
api_version: 1

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: main.py

- url: /_ah/mail/.+
  script: handle_incoming_emaril.py
  login: admin

inbound_services:
- mail

handle_incoming_email.py:


from downloadtogo.models import Email

import logging, email
import wsgiref.handlers
import exceptions

from google.appengine.api import mail
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler

class MailHandler(InboundMailHandler):
  def receive(self, message):
    email = Email()
    email.from_address = message.sender
    email.put()

def main(): 
    application = webapp.WSGIApplication([MailHandler.mapping()], debug=True)
    wsgiref.handlers.CGIHandler().run(application)

main()

models.py:


from appengine_django.models import BaseModel
from google.appengine.ext import db

class Email(db.Model):
  from_address = db.StringProperty()
  to_address = db.StringProperty()
  body = db.StringProperty(multiline=True)
  added_on = db.DateTimeProperty(auto_now_add=True)

1 Ответ

5 голосов
/ 29 августа 2010

Обработчики подбираются по порядку..* соответствует любому запросу, поэтому обработчик электронной почты никогда не будет совпадать вообще.Поставь .* последний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...