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

Sadece okunmamış postaları okumak için yukarıdaki kodu nasıl düzenlerim? Ayrıca, bir kez okuduğumuzda, mesajları Python kullanarak nasıl okunan posta olarak işaretleme?Okunmamış mesajlar nasıl okunur ve Python kullanarak IMAP üzerinden mesaj oku bayraklarını nasıl ayarlayabilirim?

cevap

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) 
İlgili konular