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

Cách sắp xếp mã ở trên, để chỉ đọc các thư chưa đọc? Ngoài ra, khi chúng tôi đọc chúng, cách đánh dấu thư là thư đã đọc bằng Python?Cách nhận tin nhắn chưa đọc và đặt cờ đọc tin nhắn qua IMAP bằng Python?

Trả lời

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) 
Các vấn đề liên quan