Continuing on my last post (), I wanted to show a snippet of Python code that will list a set of IMAP folders and count the number of messages in them. You give it a starting folder and it lists that folder plus all/any sub-folders and their message counts. At the very end it prints a total message count.
from imaplib import IMAP4, IMAP4_PORT import sys, traceback # Your IMAP Settings host = '' port = IMAP4_PORT user = '' password = '' folder = 'INBOX' imap = None def parse_mailbox(data): flags, b, c = data.partition(' ') separator, b, name = c.partition(' ') return (flags, separator.replace('"', ''), name.replace('"', '')) try: # Create the IMAP Client imap = IMAP4(host, port) # Login to the IMAP server resp, data = imap.login(user, password) if resp == 'OK' and bytes.decode(data[0]) == 'LOGIN completed': totalMsgs = 0 # Get a list of mailboxes resp, data = imap.list('"{0}"'.format(folder), '*') if resp == 'OK': for mbox in data: flags, separator, name = parse_mailbox(bytes.decode(mbox)) # Select the mailbox (in read-only mode) imap.select('"{0}"'.format(name), True) # Get ALL message numbers resp, msgnums = imap.search(None, 'ALL') mycount = len(msgnums[0].split()) totalMsgs = totalMsgs + mycount print('{:<30} : {: d}'.format(name, mycount)) print('{:<30} : {: d}'.format('TOTAL', totalMsgs)) except: print('Unexpected error : {0}'.format(sys.exc_info()[0])) traceback.print_exc() finally: if imap != None: imap.logout() imap = None