在Google App Engine中接收邮件

5 投票
1 回答
3903 浏览
提问于 2025-04-16 07:22
self.response.out.write(txtmsg)

我正在阅读关于 接收邮件 的教程。我按照说明更新了 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

并创建了一个 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()

我还有一个 hw.py 文件,是我用来练习发送邮件的。那个是可以正常工作的。

现在我访问 http://localhost:8081/_ah/admin/inboundmail 并发送一封邮件到 help@hello-1-world.appspotmail.com

有人能告诉我我该如何处理这封邮件吗?我该如何访问邮件的内容?我在 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)

据我了解,sender 是发件人的邮箱。那么,在我的情况下,我该如何访问发件人的邮箱地址呢?

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

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

如果你能帮我解答这些问题,我将不胜感激。

(我在 GAE 组里问过同样的问题,但没有人回答。)

1 个回答

1

help@hello-1-world.appspotmail.com 是一个有效的谷歌用户吗?GAE(谷歌应用引擎)只能接收和发送来自你应用的谷歌用户的邮件。你的代码看起来是对的。

“另外,为什么我需要一个单独的脚本来处理收到的邮件?为什么不能把接收邮件的处理程序放在我的 hw.py 里?” -> 主脚本是用来处理网址请求的,我觉得这样分开会更清晰。

撰写回答