用于计算雅虎电子邮件数量的Python代码最多为10,000封电子邮件,如何解决?

问题描述 投票:0回答:1

我有代码使用 Python 以编程方式计算我的雅虎电子邮件帐户的每个邮箱中的电子邮件数量。问题是,尽管我的一些收件箱里有超过 80,000 封电子邮件,但它的上限却是 10,000 封。有人知道如何解决这个问题吗?我的代码如下。谢谢!

import os
import getpass
import imaplib
import logging

IMAP_SERVER = 'imap.mail.yahoo.com'
MAILBOX_BLACKLIST = ['trash']

def get_credentials():
    username = input('Yahoo Mail username: ').strip()
    psswd = getpass.getpass(prompt='Yahoo Mail app-specific password: ')
    return username, psswd

def login(username, psswd):
    imap_client = imaplib.IMAP4_SSL(IMAP_SERVER)
    try:
        login_status, _ = imap_client.login(username, psswd)
        if login_status == "OK":
            logging.info("Login successful")
            return imap_client
    except imaplib.IMAP4.error as e:
        logging.error(f"Login failed: {e}")
    return None

def count_emails(imap_client):
    # Get list of all mailboxes
    list_status, mailboxes = imap_client.list()
    if list_status != "OK":
        logging.error("Could not retrieve mailboxes")
        return 1
    # Filter and prepare mailbox names
    mailbox_names = [get_mailbox_name(mailbox) for mailbox in mailboxes if get_mailbox_name(mailbox).lower() not in MAILBOX_BLACKLIST]
    for mailbox_name in mailbox_names:
        try:
            open_status, _ = imap_client.select(f'"{mailbox_name}"', readonly=True)
            if open_status == "OK":
                search_status, message_set = imap_client.search(None, 'ALL')
                if search_status == "OK":
                    message_nums = message_set[0].split()
                    total_messages = len(message_nums)
                    print(f"Mailbox '{mailbox_name}' has {total_messages} emails.")
                else:
                    print(f"Search failed for mailbox {mailbox_name}")
            else:
                print(f"Could not open mailbox {mailbox_name}")
        except imaplib.IMAP4.error as e:
            print(f"Error accessing {mailbox_name}: {e}")

def get_mailbox_name(mailbox):
    mailbox = mailbox.decode('utf-8')
    mailbox_name = mailbox.split(' "/"')[-1].replace('"', '').strip()
    return mailbox_name

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    username, psswd = get_credentials()
    imap_client = login(username, psswd)
    if not imap_client:
        logging.error("Exiting due to login failure")
        sys.exit(1)
    count_emails(imap_client)
    try:
        imap_client.logout()
    except imaplib.IMAP4.error as e:
        logging.error(f"Error during logout: {e}")
    sys.exit(0)
python email yahoo-mail
1个回答
1
投票

Yahoo 邮件限制只能通过 IMAP 访问 10,000 封邮件:

Microsoft 的线程特别长并且包含大量信息。一些用户能够成功使用 Yahoo 的“导出”IMAP 服务器 访问超过 10,000 条消息的限制,尽管这可能会限制为 100,000 条。

© www.soinside.com 2019 - 2024. All rights reserved.