2010-02-12 13 views
7

Ho uno script python che deve recuperare i messaggi invisibili, elaborarli e contrassegnare come si è visto (o leggere)Python, IMAP e GMail. Segna i messaggi come si vede

faccio questo dopo il login in:

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)') 

Il primo problema è che la ricerca restituisce TUTTI i messaggi e non solo l'UNSEEN. Il secondo problema è che i messaggi non sono contrassegnati come SEEN.

Qualcuno può darmi una mano con questo?

Grazie!

risposta

3

penso che i nomi di bandiera devono iniziare con un backslash, per esempio: \ 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

io non sono così familiarità con l'imaplib ma a implementare questo bene con il modulo 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. 

Diciamo che voglio solo passare attraverso le e-mail non lette, rispondere al mittente e contrassegnare l'e-mail come letto. Chiamerei la funzione smtp da qui per comporre e inviare una risposta.

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() 

Spero che questo aiuta

Problemi correlati