Python新手,试图创建一个将Gmail打印到网页的程序

时间:2018-06-14 07:36:40

标签: python web web-applications gmail imap

这是我目前的代码,我使用的是Google Cloud SDK和Python 2.7:

import webapp2
import smtplib
import time
import imaplib
import email


class ReadMail(webapp2.RequestHandler):
    def get(self):

        mail = imaplib.IMAP4_SSL(imap.gmail.com)
        mail.login('xxx@gmail.com','xxx')
        mail.select('inbox')

        type, data = mail.search(None, 'ALL')
        mail_ids = data[0]

        id_list = mail_ids.split()   
        first_email_id = int(id_list[0])
        latest_email_id = int(id_list[-1])


        for i in range(latest_email_id,first_email_id, -1):
            typ, data = mail.fetch(i, '(RFC822)' )

            for response_part in data:
                if isinstance(response_part, tuple):
                    msg = email.message_from_string(response_part[1])
                    email_subject = msg['subject']
                    email_from = msg['from']
                    self.response.headers['Content-Type'] = 'text/plain'
                    self.response.write('Hello World?')
                    self.response.write('From :') + email_from + '\n'
                    self.response.write('Subject :') + email_subject + '\n'




app = webapp2.WSGIApplication([
    ('/', ReadMail),
], debug=True)

但是我收到此错误,并且网页无法加载(HTML 500错误):

ERROR    2018-06-14 07:30:02,217 wsgi.py:279]
Traceback (most recent call last):
  File "C:\Users\XXX\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\runtime\wsgi.py", line 267, in Handle
    result = handler(dict(self._environ), self._StartResponse)
TypeError: 'module' object is not callable
INFO     2018-06-14 10:30:02,878 module.py:846] default: "GET / HTTP/1.1" 500 -
INFO     2018-06-14 10:30:08,711 module.py:414] [default] Detected file changes:
  hello.pyc

我看到问题在于调用模块,但由于我对python完全不熟悉,因此我很难理解它是如何工作的。任何帮助将不胜感激!

修改 如果我从'Request.Handler'中移除class ReadMail(webapp2.RequestHandler),则会收到此错误:

 File "C:\Users\xxx\desktop\pythontest\demo\hello.py", line 8, in <module>
    class ReadMail(webapp2):
TypeError: Error when calling the metaclass bases
    module.__init__() takes at most 2 arguments (3 given)
INFO     2018-06-14 11:00:42,963 module.py:846] default: "GET / HTTP/1.1" 500 -

1 个答案:

答案 0 :(得分:1)

该行

mail = imaplib.IMAP4_SSL(imap.gmail.com)

应该是

mail = imaplib.IMAP4_SSL('imap.gmail.com')