#!/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. """ return ''.join([f"+'{box}' " for box in list]) def sort_mailboxes(mailboxes): """ Sort boxes list according to a predefined order. """ order = [ "INBOX", "Unread", "Drafts", "Sent", "Spam", "Trash", "Junk", "Archive" ] mailboxes = sorted(mailboxes) # sort based on predefined order output = [] for exp in order: matching = [s for s in mailboxes if exp in s] output.extend(matching) # ensure all retrieved boxes are present for box in mailboxes: if box not in output: output.append(box) return output 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_mailboxes(get_boxes(mail.list()[1])) # oneline pretty-print for neomutt print(flatten_output(bxs), end=' ') if __name__ == "__main__": main()