2010-11-20 5 views
5

Я читаю учебник о Receiving Mail. Я обновил файл app.yaml в соответствии с инструкциями:Получение почты в Google App Engine

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 и отправить по электронной почте [email protected]

Может кто-нибудь объяснить мне, как я обрабатываю это письмо? Как получить доступ к контенту электронной почты? У меня есть код

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, но не было никаких ответов.)

+0

Является ли это logging.info («Получено письмо с% s»% message.sender) строка кода, записывая что-нибудь? – systempuntoout

+1

Да; Я не знал, что logging.info регистрирует информацию в Log Console :) Итак, код работает; теперь мне нужно понять, как написать содержание сообщения электронной почты в хранилище данных. Благодаря! – Zeynel

ответ

1

Является [email protected]pspotmail.com действительным пользователем Google? GAE может получать/отправлять почту только от пользователя Google вашего приложения. Ваш код кажется правильным.

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

+0

Спасибо за ответ. Я смущен тем, почему 'help @ hello-1-world.appspotmail.com' должен быть« действительным пользователем Google ». В учебнике говорится: «Ваше приложение может получать электронную почту по адресам следующей формы:' string @ appid.appspotmail.com'. Мне кажется, что 'help @ hello-1-world.appspotmail.com' соответствует этой форме. Но я не понимаю, как обрабатывать это электронное письмо. Например, как распечатать тело полученного письма? – Zeynel

+1

Ваш код верен, если вы запустите приложение, и вы получите сообщение электронной почты, вы увидите тело в журналы. Честно говоря, я предположил, что только пользователи google, где действительный адрес электронной почты, но я никогда не проверял. Конечно, только пользователи google могут быть отправителем почты. Проверьте также, что почта действительно активна с консоли. – Uberto

+0

Извините, я не знал, что за журнал .info() 'сделал.Да, я вижу в Log Console, что письмо, отправленное с 'http: // localhost: 8081/_ah/admin/inboundmail', получено и вошло в систему. Спасибо, что разъяснил это. Теперь я попытаюсь записать содержимое в хранилище данных. – Zeynel

Смежные вопросы