Получение почты в Google App Engine - PullRequest
5 голосов
/ 20 ноября 2010

Я читаю учебник о Прием почты . Я обновил файл 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, но это ничего не печатает.

Буду очень признателен, если кто-нибудь разъяснит, как работает получение электронной почты.

Например, в этом вопросе

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 голос
/ 20 ноября 2010

Является ли help@hello-1-world.appspotmail.com действительным пользователем Google?GAE может получать / отправлять почту только от пользователя Google вашего приложения.Ваш код кажется правильным.

"Кроме того, зачем мне нужен отдельный скрипт для обработки входящей почты? Почему я не могу поместить обработчик ReceiveEmail в мой файл hw.py" -> основной скриптобработать URL-запрос, я думаю, что это намного понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...