简体   繁体   English

如何使用 Python 通过 IMAP 获取未读消息并设置消息读取标志?

[英]How to get unread messages and set message read flags over IMAP using Python?

import imaplib
def read():

    userName = "xxx@gmail.com"
    password = "xxxx" 
    name = 'xxx@gmail.com'
    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 "xxx@gmail.com")')
    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()

How to organise the code above, to read only unread mails?如何组织上面的代码,只阅读未读邮件? Also, once we read them, how to mark the messages as read mail using Python?另外,一旦我们阅读了它们,如何使用 Python 将消息标记为已读邮件?

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

You may use my lib - imap_tools: https://pypi.org/project/imap-tools/您可以使用我的库 - imap_tools: https ://pypi.org/project/imap-tools/

from imap_tools import MailBox, Q

# get subjects of unseen emails from INBOX folder
with MailBox('imap.mail.com').login('test@mail.com', 'password') as mailbox:
    subjects = [msg.subject for msg in mailbox.fetch(Q(seen=False), mark_seen=True)]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM