2010-08-29 115 views
3

我正在爲需要接收電子郵件並將接收到的電子郵件的某些元素添加到數據存儲的Google App Engine(使用Python和Django)編寫應用程序。我是一個非常新手的程序員。帶有Django的Google App Engine - InboundMailHandler似乎只能運行一次

問題是我指定處理傳入電子郵件的腳本似乎只運行一次(直到腳本被觸摸)。

將測試電子郵件從本地管理控制檯發送到'[email protected]'會導致實體正確添加到本地數據存儲。

發送第二個,第三個等測試郵件不起作用 - 不添加實體。

「接觸」 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) 
+0

在您的app.yaml「handle_incoming_emaril.py」中是否存在拼寫錯誤? – zovision 2010-08-29 10:41:08

+0

哈,好抓!有 - 修復它沒有任何區別,這讓我想知道handle_incoming_email.py是如何被調用的。 – oldpal 2010-08-29 18:12:01

回答

5

處理程序,以便匹配。 .*匹配任何請求,所以電子郵件處理程序永遠不會匹配。把.*放在最後。

+0

謝謝!我沒有意識到這一點。 不知何故,handle_incoming_email.py在其他地方被調用 - 不僅沒有被匹配(根據你的答案),但我錯誤地在app.yaml(根據上面的zovision的評論)。 現在,它被匹配,發送測試電子郵件會導致「KeyError:'警告'」 - 我會試着去捕捉這個。 – oldpal 2010-08-29 18:19:37

+0

在其他問題中,我在我的電腦上安裝了Python 2.7以及所需的Python 2.5 - 這是導致KeyError的原因。 再次感謝您的幫助! – oldpal 2010-08-29 19:56:05

相關問題