在Google App Engine中接收邮件

Zey*_*nel 5 python email google-app-engine

我正在阅读有关接收邮件的教程.我按照说明更新了app.yaml文件:

application: hello-1-world
version: 1
runtime: python
api_version: 1

handlers:
- url: /favicon.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon.ico

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

- url: /.*
  script: hw.py

inbound_services:
- mail
Run Code Online (Sandbox Code Playgroud)

并创造了一个 handle_incoming_email.py

import cgi
import os
import logging
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from google.appengine.api import mail
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler

class ReceiveEmail(InboundMailHandler):
    def receive(self,message):
        logging.info("Received email from %s" % message.sender)
        plaintext = message.bodies(content_type='text/plain')
        for text in plaintext:
            txtmsg = ""
            txtmsg = text[1].decode()
            logging.info("Body is %s" % txtmsg)
            self.response.out.write(txtmsg)

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

def main():
    run_wsgi_app(application)
if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

我也有hw.py过习惯发送电子邮件的习惯.那一个有效.

现在我去http://localhost:8081/_ah/admin/inboundmail发送电子邮件给help@hello-1-world.appspotmail.com

任何人都可以向我解释我如何处理这封电子邮件?如何访问电子邮件的内容?我有代码

self.response.out.write(txtmsg)
Run Code Online (Sandbox Code Playgroud)

handle_incoming_email.py但这并不显示任何信息.

如果有人澄清接收电子邮件是如何工作的,我将不胜感激.

例如,在这个问题中

class MailHandler (InboundMailHandler):
  def receive(self, message):
    sender = message.sender
    user_account = db.GqlQuery("SELECT * FROM Task WHERE user = :1", sender).fetch(5)
Run Code Online (Sandbox Code Playgroud)

据我所知,sender是发件人的电子邮件.因此,在我的情况下,我如何访问发件人的电子邮件地址.

另外,为什么我需要一个单独的脚本来处理传入的邮件?为什么我不能把 ReceiveEmail处理程序放在我的hw.py脚本中?如果我这样做,我在哪里放线

application = webapp.WSGIApplication([
  ReceiveEmail.mapping()
], debug=True)
Run Code Online (Sandbox Code Playgroud)

如果你能帮助我解决这些问题,我将不胜感激.

(在GAE小组中问了同样的问题,但没有答案.)

Ube*_*rto 1

help@hello-1-world.appspotmail.com 是有效的 Google 用户吗?GAE 只能接收/发送来自您应用程序的 google 用户的邮件。你的代码看起来是正确的。

“另外,为什么我需要一个单独的脚本来处理传入的邮件?为什么我不能将 ReceiveEmail 处理程序放在我的 hw.py 中”-> 主要脚本是处理 url 请求,我认为这更清楚方式。