2010-02-12 9 views
7

Mam skrypt Pythona, który ma przynieść niewidoczne wiadomości, proces go i znak widziany (lub odczytywane)Python, IMAP i Gmail. Oznacz wiadomości widzianych

to zrobić po zalogowaniu się:

typ, data = self.server.imap_server.search(None, '(UNSEEN)') 

    for num in data[0].split(): 
     print "Mensage " + str(num) + " mark" 
     self.server.imap_server.store(num, '+FLAGS', '(SEEN)') 

Pierwszy problem to znaczy, że wyszukiwanie zwraca WSZYSTKIE wiadomości, a nie tylko NIEAKTYWNE. Drugi problem polega na tym, że wiadomości nie są oznaczone jako SEEN.

Czy ktoś może mi w tym pomóc?

Dzięki!

Odpowiedz

3

myślę nazwy flag muszą zacząć backslashem, np: \ SEEN

12
import imaplib 
obj = imaplib.IMAP4_SSL('imap.gmail.com', '993') 
obj.login('user', 'password') 
obj.select('Inbox') <--- it will select inbox 
typ ,data = obj.search(None,'UnSeen') 
obj.store(data[0].replace(' ',','),'+FLAGS','\Seen') 
0

nie jestem tak obeznany z imaplib ale zaimplementować to dobrze z modułem imapclient

import imapclient,pyzmail,html2text 
from backports import ssl 
context=ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 

iobj=imapclient.IMAPClient('outlook.office365.com', ssl=True, ssl_context=context) 
iobj.login(uname,pwd)# provide your username and password 
iobj.select_folder('INBOX',readonly=True)# Selecting Inbox. 

unread=iobj.search('UNSEEN')# Selecting Unread messages, you can add more search criteria here to suit your purpose.'FROM', 'SINCE' etc. 
print('There are: ',len(unread),' UNREAD emails') 

for i in unread: 

    mail=iobj.fetch(i,['BODY[]'])#I'm fetching the body of the email here. 
    mcontent=pyzmail.PyzMessage.factory(mail[i][b'BODY[]'])#This returns the email content in HTML format 
    subject=mcontent.get_subject()# You might not need this    
    receiver_name,receiver_email=mcontent.get_address('from') 
    mail_body=html2text.html2text(mcontent.html_part.get_payload().decode(mcontent.html_part.charset))# This returns the email content as text that you can easily relate with. 

Załóżmy, że chcę po prostu przejrzeć nieprzeczytane wiadomości e-mail, odpowiedzieć nadawcy i oznaczyć wiadomość jako przeczytaną. Nazwałbym funkcję smtp stąd, aby skomponować i wysłać odpowiedź.

import smtplib 
smtpobj=smtplib.SMTP('smtp.office365.com',587) 
smtpobj.starttls() 
smtpobj.login(uname,pwd)# Your username and password goes here. 
sub='Subject: '+str(subject)+'\n\n'# Subject of your reply 
msg='Thanks for your email! You're qualified for the next round' #Some random reply :(
fullmsg=sub+new_result 
smtpobj.sendmail(uname,test,fullmsg)# This sends the email. 
iobj.set_flags(i,['\\Seen','\\Answered'])# This marks the email as read and adds the answered flag 
iobj.append('Sent Items', fullmsg)# This puts a copy of your reply in your Sent Items. 

iobj.logout() 
smtpobj.logout() 

Mam nadzieję, że to pomoże