#!/usr/bin/env python3 import imaplib import sys def get_boxes(list): """ Retrieve and decode all mailboxes. """ return [box.decode('utf-8').rsplit(' ')[-1] for box in list] def flatten_output(list): """ Print all boxes with a flattened output, primarily for neomutt usage. """ return ''.join([f"+'{box}' " for box in list]) def sort_boxes(bxs): """ Sort boxes list, according to a predefined order """ order = [ "INBOX", "Unread", "Drafts", "Sent", "Spam", "Trash", "Junk", "Archive" ] bxs_orig = sorted(bxs) # sort based on predefined order bxs = [] for exp in order: matching = [s for s in bxs_orig if exp in s] bxs.extend(matching) # ensure all retrieved boxes are present for bx in bxs_orig: if bx not in bxs: bxs.append(bx) return bxs def main(): """ Retrieve, sort, and pretty print for neomutt """ # user information remote = sys.argv[1] username = sys.argv[2] password = sys.argv[3] # connection mail = imaplib.IMAP4_SSL(remote) mail.login(username, password) # parse folders output bxs = sort_boxes(get_boxes(mail.list()[1])) # oneline pretty-print for neomutt print(flatten_output(bxs), end=' ') if __name__ == "__main__": main()