#!/usr/bin/python2.5 # -*- coding: utf-8 -*- # # process-tickler – process message in tickler maildir # # Copyright © martin f. krafft # Released under the terms of the Artistic Licence 2.0 # import mailbox import os import sys import time HOME = os.getenv('HOME') MAILDIR = os.path.join(HOME, '.maildir') TICKLER_DIR = os.path.join(MAILDIR, '.tickler') DEST_DIR = os.path.join(MAILDIR, '.resubmit') tmd = mailbox.Maildir(TICKLER_DIR) dmd = mailbox.Maildir(DEST_DIR) msgids = dict() def resubmit(key): msg = tmd.get_message(key) print >>sys.stdout, 'I: resubmit message %s' % key if msg.has_key('X-Tickle-Delivered'): msg.replace_header('X-Tickle-Delivered', time.strftime('%c')) else: msg.add_header('X-Tickle-Delivered', time.strftime('%c')) dmd.add(msg) tmd.discard(key) for key, msg in tmd.iteritems(): msgid = msg.get('Message-Id') if msgid is None: print >>sys.stderr, 'W: message without ID: ' + key resubmit(key) tickle = msg.get('X-Tickle') if tickle is None: print >>sys.stderr, 'W: message without tickle information: ' + key resubmit(key) if msgids.get(msgid, None) is None: msgids[msgid] = list() msgids[msgid].append((int(tickle.split(' ', 1)[0]), key, msg)) for msgid, msgs in msgids.iteritems(): msgs.sort() prev_tickle = None for tickle, key, msg in msgs: if tickle == prev_tickle: print >>sys.stderr, 'I: discarding duplicate %s of message %s' % (key, msgid) tmd.discard(key) continue prev_tickle = tickle t = time.time() if t >= tickle: resubmit(key) else: print >>sys.stdout, 'I: message %s still has %d seconds' % (key, int(tickle - t))