【问题标题】:Receiving Mail in Google App Engine在 Google App Engine 中接收邮件
【发布时间】:2011-05-13 02:28:53
【问题描述】:

我正在阅读有关Receiving Mail 的教程。我按照说明更新了 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

谁能向我解释我如何处理这封电子邮件?如何访问电子邮件的内容?我有代码

self.response.out.write(txtmsg)

handle_incoming_email.py 中,但不会打印任何内容。

如果有人能说明接收电子邮件的工作原理,我将不胜感激。

例如in this question

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)

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

I asked the same question 在 GAE 组,但没有答案。)

【问题讨论】:

  • 这是 logging.info("Received email from %s" % message.sender) 行代码,正在记录什么吗?
  • 是的;我不知道 logging.info 正在将信息记录到日志控制台:) 所以,代码似乎正在工作;现在我需要弄清楚如何将电子邮件的内容写入数据存储区。谢谢!

标签: python google-app-engine email


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我对为什么help@hello-1-world.appspotmail.com 需要成为“有效的谷歌用户”感到困惑。该教程说:“您的应用程序可以通过以下形式的地址接收电子邮件:string@appid.appspotmail.com 所以在我看来help@hello-1-world.appspotmail.com 符合该形式。但我不明白如何处理这封电子邮件。例如,如何打印收到的邮件正文?
  • 您的代码是正确的,如果您运行应用程序并且电子邮件接收处于活动状态,您应该会在日志中看到正文。坦率地说,我认为只有有效电子邮件的谷歌用户,但我从未检查过。当然只有谷歌用户可以成为邮件发件人。还要从控制台检查邮件是否真的处于活动状态。
  • 抱歉,我不知道logging.info() 做了什么。是的,我在日志控制台中看到我从http://localhost:8081/_ah/admin/inboundmail 发送的电子邮件已收到并已登录。感谢您对此进行澄清。现在我将尝试将内容写入数据存储区。
  • 您的邮件地址是有效的,但您不能向appspotmail.com 发送邮件并期望您的开发服务器接收它。所以,你的代码和你使用的邮件地址看起来都很好。您可以使用开发服务器控制台来模拟传入的电子邮件消息。转到localhost:8081/_ah/admin(或您正在运行它的任何端口)。单击左侧的入站邮件,您应该能够从那里找出其余的。除此之外,您可以在这里找到解析电子邮件所需的一切:code.google.com/appengine/docs/python/mail/receivingmail.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2014-11-05
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多