2014-04-04 5 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() 

Wie den obigen Code zu organisieren, nur ungelesene Mails lesen? Auch, wenn wir sie lesen, wie markieren Sie die Nachrichten als gelesene Mail mit Python?Wie bekomme ich ungelesene Nachrichten und setze Flags über IMAP mit Python?

Antwort

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) 
Verwandte Themen