我正在测试新应用中的传入电子邮件地址,并且难以理解为什么他们在开发服务器中工作但不在实时应用中工作。我的app文件是:
的app.yaml:
version: 1
runtime: python27
api_version: 1
threadsafe: true
inbound_services:
- mail
handlers:
- url: /.*
script: hello.app
- url: /_ah/mail/.+
script: hello.app
login: admin
hello.py:
import logging
import webapp2
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
class MailHandler(InboundMailHandler):
def receive(self, msg):
logging.info("Received a message from: %s, subject: %s", msg.sender, msg.subject)
app = webapp2.WSGIApplication([
('/_ah/mail/', MailHandler),
('/', MainPage),
], debug=True)
当我使用开发管理员网络界面“发送”测试电子邮件时,开发服务器会打印预期的日志消息,但是当我向实时应用程序发送电子邮件时(即test@myappid.appspotmail.com),它在日志中记录404并返回一条退回邮件,说明“交付给以下收件人永久失败”。有什么想法吗?
答案 0 :(得分:1)
将您的代码与我的工作应用中的部分进行比较,一个区别是我的应用
('/_ah/mail/.+', MailHandler),
而不是
('/_ah/mail/', MailHandler),
事实上,便捷方法InboundMailHandler.mapping()
会产生' / _ ah / mail /.+'
试试。
更新以添加:另一个区别。在我的app.yaml
中,我匹配' /.*'持续。从表面上看,这似乎并不重要,但值得将最常用的模式放在最后,以避免在匹配时产生混淆,而不是在其下方更具体的模式。