0

我的 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。似乎它应该是直截了当的,但我无法弄清楚。

4

2 回答 2

1

地址在handler URL 中,你可以查看self.request.path 来检索它,但确实应该使用mail_message 获取这个值。

于 2012-06-20T06:27:26.513 回答
0

OK,去源码搞清楚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() 便利功能(在这种情况下无论如何都不会做任何事情)或处理程序中的接收方法(实际上只是从请求中获取电子邮件并将其放入 args 到收到。)

于 2012-06-21T17:45:13.073 回答