2016-09-20 128 views

回答

0

这是旧的(沙盒),并做真快,所以,你必须重构代码

import re 
import sys 
import imaplib 
import getpass 
import email 
import datetime 
import string 
import get_mail_search 
from sys import stdout 

M = imaplib.IMAP4_SSL('imap.gmail.com') 
class Get_mail(object): 
    """docstring for Get_mail""" 
    def __init__(self, *args): 
     super(Get_mail, self).__init__() 
     c=1 
     self.login(c) 
     self.toast_msg() 

     raw_input() 
    def toast_msg(self, *args): 
     """docstring for Get_mail""" 
     M = self.mailbox() 
     stdout.write("\n{}\n".format(get_mail_search.search_help_info)) 
     serach_input = raw_input() 
     rv, data = M.search(None, serach_input) 
     if rv != 'OK': 
      print "No messages found!" 
     id_ls = data[0].split() 
     rev_id_ls = [i for i in reversed(id_ls)] 
     if rev_id_ls: 
      for o in rev_id_ls: 
       try: 
        msg_content = self.process_mailbox(M, o) 
        _date_ = msg_content[0] 
        _from_ = msg_content[1] 
        _to_ = msg_content[2] 
        _subject_ = msg_content[3] 
        _msg_ = msg_content[4] 
        stdout.write("$$$$$$$$$$$\nDate: {}\nFrom: {}\nTo: {}\nSubject: {}\nMSG: {}\n".format(_date_,_from_,_to_,_subject_,_msg_)) 
       except Exception, e: 
        pass 
     else: 
      stdout.write("No {} Mail Found!".format(serach_input)) 
      raw_input() 
      self.toast_msg() 

    def login(self, try_c, *args): 
     """docstring for Get_mail""" 
     try: 
      stdout.write("\nMail:\n") 
      mail = raw_input() 
      if mail: 
       M.login(str(mail), getpass.getpass()) 
      else: 
       sys.exit(1) 
     except imaplib.IMAP4.error: 
      if try_c<=3: 
       stdout.write("Versuch: {}/3\n".format(try_c)) 
       stdout.write("Die eingegebene E-Mail-Adresse und das Passwort stimmen nicht uberein. Nochmal versuchen") 
       try_c+=1 
       self.login(try_c) 
      else: 
       sys.exit(1) 
    def mailbox(self, *args): 
     """docstring for Get_mail""" 
     rv, mailboxes = M.list() 
     if rv == 'OK': 
      for menu in mailboxes: 
       print('{}'.format(menu)) 
      rv, data = M.select("inbox") 
      if rv == 'OK': 
       return M 
    def eval_decode(self, header, *args): 
     """docstring for Get_mail""" 
     return email.Header.decode_header(header)[0] 

    def process_mailbox(self, M, num, *args): 
     """docstring for Get_mail""" 
     rv, header = M.fetch(num, '(RFC822)') 
     if rv != 'OK': 
      print "ERROR getting message", num 
     header_msg = email.message_from_string(header[0][1]) 
     if header_msg.is_multipart(): 
      body=[payload.get_payload(decode=True) for payload in header_msg.get_payload()] 
     else: 
      body=payload.get_payload(decode=True) 
     from_decode = self.eval_decode(header_msg['From']) 
     subject_decode = self.eval_decode(header_msg['Subject']) 
     date_decode = self.eval_decode(header_msg['Date']) 
     to_decode = self.eval_decode(header_msg['To']) 
     return (date_decode[0], from_decode[0], to_decode[0], subject_decode[0], str(body[0])) 
def run(): 
    try: 
     Get_mail() 
    except KeyboardInterrupt: 
     M.close() 
     M.logout() 
     sys.exit(1) 
run() 
1

在这里你必须使用谷歌的API的Python客户端为例 首先,您必须在Google开发者控制台上创建您的客户机密。

你执行的代码第一次,你将不得不脚本授权使用您的Gmail帐户,然后就可以保存在一个文件作为例子的凭据,并将其用于未来的执行,而不需要此认证

from googleapiclient.discovery import build 
from oauth2client import client 
from googleapiclient.errors import HttpError 
import base64 
from email.mime.text import MIMEText 
from apiclient import errors 
from oauth2client import client 
import httplib2 
from googleapiclient.discovery import build 


def getCredentials(secrets, scope,filename): 
    flow = client.flow_from_clientsecrets(
      secrets, 
      scope=scope, 
      redirect_uri='urn:ietf:wg:oauth:2.0:oob') 
    auth_uri = flow.step1_get_authorize_url() 
    webbrowser.open(auth_uri) 
    auth_code = raw_input('Enter the auth code: ') 
    credentials = flow.step2_exchange(auth_code) 
    saveJson(filename,credentials.to_json()) 


def saveJson(filename, object): 
    with open(filename, 'w') as f: 
     json.dump(object, f) 

def openJson(filename): 
    with open(filename, 'r') as f: 
     object = json.load(f) 
    return object 

if __name__=='__main__': 
    client_secrets = 'client_secrets.json' #client secrets to use the API 
    credentials = 'auth_credentials.json' 
    if(firstRun) #create a file with the auth credentials 
     scope = 'https://www.googleapis.com/auth/gemail.send' 
     getCredentials(secrets,scope,credentials) 

    cre = client.Credentials.new_from_json(openJson(credentials)) 
    http_auth = cre.authorize(httplib2.Http()) 
    gmail = build('gmail', 'v1', http=http_auth) 
    #gmail.doSomething 
相关问题