我的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。似乎它应该是直截了当的,但我无法弄明白。
答案 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中接收。)