import sys import mailbox VERBOSE = 1 def log(*args): if not VERBOSE: return print('| ' + ''.join(str(i) for i in args), file=sys.stderr) class MailboxHelper: @staticmethod def open(path, type='mbox', create=False): log('Opening ', type, ' mailbox ', path) if type == 'mbox': mb = mailbox.mbox elif type == 'maildir': mb = mailbox.Maildir #try: mb = mb(path, create=create) #except Exception: # FIXME throws IOError (Errno 21) if dispatch specified a dir but # dod not set a dir-based type.. # panic('Failed to open ', path, extb=E()) return mb msg = None inmb = MailboxHelper.open('input.mdir', type='maildir', create=False) try: log('* Box has ', len(inmb), ' messages, filtering through rulesets') cnt = 0 for k in inmb.iterkeys(): cnt += 1 log('({!s:>04})'.format(cnt)) msg = inmb.get_message(k) if cnt == 1: break except Exception as e: error('failed to handle box ', b, extb=E()) outmb = MailboxHelper.open('output.mbox', create=True) try: outmb.add(msg) outmb.flush() except Exception as e: log(': message-add failed.\n') raise finally: outmb.unlock()