2014-04-04 23 views
6
import imaplib 
def read(): 

    userName = "[email protected]" 
    password = "xxxx" 
    name = '[email protected]' 
    email_ids = [userName] 
    data = [] 
    imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993) 
    imap_server.login(userName, password) 
    imap_server.select('INBOX') 
    da = [] 
    status, response = imap_server.status('INBOX', "(UNSEEN)") 
    unreadcount = int(response[0].split()[2].strip(').,]')) 
    print unreadcount 

    status, response = imap_server.search(None, '(FROM "[email protected]")') 
    email_ids = [e_id for e_id in response[0].split()] 
    for e_id in email_ids: 
     _, response = imap_server.fetch(e_id, '(UID BODY[TEXT])') 
     da.append(response[0][1]) 
    print da 


read() 

Jak zorganizować powyższy kod, aby czytać tylko nieprzeczytane wiadomości? Ponadto, gdy je przeczytamy, jak oznaczać wiadomości jako przeczytane wiadomości za pomocą Pythona?Jak uzyskać nieprzeczytane wiadomości i ustawić flagi odczytu wiadomości przez IMAP za pomocą Pythona?

Odpowiedz

7
import imaplib 

def read(username, password, sender_of_interest): 
    # Login to INBOX 
    imap = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
    imap.login(username, password) 
    imap.select('INBOX') 

    # Use search(), not status() 
    status, response = imap.search(None, 'INBOX', '(UNSEEN)') 
    unread_msg_nums = response[0].split() 

    # Print the count of all unread messages 
    print len(unread_msg_nums) 

    # Print all unread messages from a certain sender of interest 
    status, response = imap.search(None, '(UNSEEN)', '(FROM "%s")' % (sender_of_interest)) 
    unread_msg_nums = response[0].split() 
    da = [] 
    for e_id in unread_msg_nums: 
     _, response = imap.fetch(e_id, '(UID BODY[TEXT])') 
     da.append(response[0][1]) 
    print da 

    # Mark them as seen 
    for e_id in unread_msg_nums: 
     imap.store(e_id, '+FLAGS', '\Seen') 
0
def read(username, password, sender_of_interest=None): 
    # Login to INBOX 
    imap = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
    imap.login(username, password) 
    imap.select('INBOX') 
    # Use search(), not status() 
    # Print all unread messages from a certain sender of interest 
    if sender_of_interest: 
     status, response = imap.uid('search', None, 'UNSEEN', 'FROM {0}'.format(sender_of_interest)) 
    else: 
     status, response = imap.uid('search', None, 'UNSEEN') 
    if status == 'OK': 
     unread_msg_nums = response[0].split() 
    else: 
     unread_msg_nums = [] 
    data_list = [] 
    for e_id in unread_msg_nums: 
     data_dict = {} 
     e_id = e_id.decode('utf-8') 
     _, response = imap.uid('fetch', e_id, '(RFC822)') 
     html = response[0][1].decode('utf-8') 
     email_message = email.message_from_string(html) 
     data_dict['mail_to'] = email_message['To'] 
     data_dict['mail_subject'] = email_message['Subject'] 
     data_dict['mail_from'] = email.utils.parseaddr(email_message['From']) 
     data_dict['body'] = email_message.get_payload() 
     data_list.append(data_dict) 
    print(data_list)