如何使用Google App Engine Python Mail服务找到请求的URL?

时间:2012-06-20 03:43:15

标签: python google-app-engine wsgi

我的Google App Engine应用程序希望存储各种传入的电子邮件,包括电子邮件发送给谁。我试图找出如何查看电子邮件发布到的URL,以便找到预期的收件人。

app.yaml有:

inbound_services:
- mail
handlers:
- url: /_ah/mail/.+ 
  script: handle_incoming_email.py 
  login: admin

Python脚本有:

class Message(db.Model):
    recipient = db.stringProperty()
    subject = db.stringProperty()
    # etc.

class MyMailHandler(InboundMailHandler):
    def receive(self, mail_message):
        msg = Message(subject=mail_message.subject, recipient=???)
        msg.put()

application = webapp.WSGIApplication([MyMailHandler.mapping()], debug=True)

因此,如果发送电子邮件至john@myapp.appspot.com,则收件人将为john@myapp.appspot.com。如果电子邮件发送到jane@myapp.appspot.com,收件人将是jane@myapp.appspot.com等。

我知道我可以筛选mail_message.to字段,但我宁愿查看实际的传入URL。似乎它应该是直截了当的,但我无法弄明白。

2 个答案:

答案 0 :(得分:1)

地址在处理程序URL中,您可以查看self.request.path来检索它,但是真的应该使用mail_message获取此值。

答案 1 :(得分:0)

好的,去了源来弄清楚receive()和mapping()做了什么。我最终做了我想要的方式:

class MyEmailHandler(InboundMailHandler):
    def post(self,recipient):
        # 'recipient' is the captured group from the below webapp2 route
        mail_message = mail.InboundEmailMessage(self.request.body)
        # do stuff with mail_message based on who recipient is

app = webapp2.WSGIApplication(
    [(r'/_ah/mail/(.+)@.+\.appspotmail\.com',MyEmailHandler)],
    debug=True)

webapp2路由器允许捕获组,它将作为参数发送给处理程序。这里捕获的组是recipient@myapp.appspotmail.com中的“收件人”。但你不能使用mapping()方便函数(在这种情况下不做任何事情)或处理程序中的receive方法(它实际上只是从请求中获取电子邮件消息并将其放入args中接收。)