2010-02-12 2 views
7

ich einen Python-Skript, die unsichtbaren Nachrichten zu holen hat, zu verarbeiten und Zeichen wie gesehen (oder lesen)Python, IMAP und GMail. Markieren von Nachrichten als GESEHEN

ich dies in nach der Anmeldung tun:

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

Das erste Problem ist, dass die Suche ALLE Nachrichten und nicht nur die UNSEEN zurückgibt. Das zweite Problem besteht darin, dass Nachrichten nicht als SEEN markiert sind.

Kann mir jemand dabei helfen?

Danke!

Antwort

3

Ich denke, die Flagge Namen mit einem Schrägstrich beginnen müssen, zB: \ GESEHEN

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

Ich bin nicht so vertraut mit dem imaplib aber ich dies implementieren gut mit dem imapclient Modul

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. 

Nehmen wir an, ich möchte nur die ungelesenen E-Mails durchgehen, den Absender antworten und die E-Mail als gelesen markieren. Ich würde von hier aus die Funktion smtp aufrufen, um eine Antwort zu verfassen und zu senden.

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

Ich hoffe, das hilft