2015-07-28 2 views
0

Я прочитал некоторые решения, но ни один из них не работал, возможно, из-за Gmail, я не уверен, что я хочу переместить свои электронные письма из INBOX в корзину, и это то, что я делаю:Python. Imaplib, перемещая почту в корзину

def process_mailbox(): 
    message={} 

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

    try: 
     M.login('[email protected]', 'mypassword') 
    except imaplib.IMAP4.error: 
     print "LOGIN FAILED!!! " 
     # ... exit or deal with failure... 

    rv, mailboxes = M.list() 

    print mailboxes 

    if rv == 'OK': 

     M.select("INBOX") 
     rv, data = M.search(None, "ALL") 
     if rv != 'OK': 
      print "No messages found!" 


    for num in data[0].split(): #Read all the mails 
     rv, data = M.fetch(num, '(RFC822)') 
     if rv != 'OK': 
      print "ERROR getting message", num 
      return 

     msg = email.message_from_string(data[0][1]) 

     #print 'Subject %s: %s' % (num, msg['Subject']) 
     message['Subject']=msg['Subject'] 
     print 'Subject: '+message['Subject'] 
     if msg.get_content_type() == "text_plain": #No Multipart messages 

      body = msg.get_payload()  
      message['Body']=body 


     else: #Multipart messages 
      for part in msg.walk(): 
       if part.get_content_type() == "text/plain": # ignore attachments/html 


        message['Body']=body 
        #print message['Body'] 



     date_tuple = email.utils.parsedate_tz(msg['Date']) 
     if date_tuple: 
      local_date = datetime.datetime.fromtimestamp(
       email.utils.mktime_tz(date_tuple)) 
      print "Local Date:", local_date.strftime("%Y-%m-%d") 
      message['Date']=local_date.strftime("%Y-%m-%d") 
     #send_mail(message) 

     #insert_vulnerability_mail(message['Subject'],message['Date'],message['Body'].encode('utf-8')) 
     # M.store(num, '+FLAGS', '\\Deleted') 
     M.copy(num,'[Gmail]/Trash') 
    M.close() 
    M.logout() 

Итак, как вы можете видеть, это: M.copy (num, '[Gmail]/Trash'), и в результате я перемещаю некоторые электронные письма, скажем, если у меня есть 7, я перемещаю 4 из 7, я получаю эту ошибку:

Traceback (most recent call last): 
    File "mail.py", line 116, in <module> 
    process_mailbox() 
    File "mail.py", line 75, in process_mailbox 
    msg = email.message_from_string(data[0][1]) 
TypeError: 'NoneType' object has no attribute '__getitem__' 

Что я не понимаю, потому что, когда я исполняю следующий раз, когда я программка двигаться больше писем, получаю ошибку на другой адрес электронной почты, выполнить, и я в конечном итоге движущихся эв но я должен выполнить несколько раз.

Кто-нибудь знает, что происходит? Спасибо заранее на

ответ

0

Попробуйте это:

imap.store(mail_to_be_deleted, '+FLAGS', r'(\Deleted)') 
Смежные вопросы