#/usr/bin/env python2.5
# David Bremner 2007/10/10
# placed in the public domain
from mailbox import Maildir
from email import utils
import os
import time
import datetime
import logging
import fcntl
config = { 'loglevel':logging.DEBUG,
'logfile':os.path.expanduser('~/var/log/scan-whitelist.log'),
'keepdays':14,
'maildir':os.path.expanduser("~/Maildir/"),
'whitelistfolder':'whitelist',
'outfile':os.path.expanduser("~/var/mail/whitelist"),
}
logging.basicConfig(level=config['loglevel'],
format='%(asctime)s %(levelname)s %(message)s',
filename=config['logfile'],
filemode='a')
fd=open(config['outfile'],'r+')
exists={}
fcntl.lockf(fd,fcntl.LOCK_EX)
for line in fd.readlines():
exists[line.strip()]=1
now=datetime.datetime.now()
mainbox=Maildir(config['maildir'])
whitelist=mainbox.get_folder(config['whitelistfolder'])
for key in whitelist.keys():
msg=whitelist[key]
addr=msg['from']
exists[addr]=1
logging.debug('processing %s %s' %(key,addr))
whitelist.discard(key)
fd.seek(0)
for line in sorted(exists.keys()):
print >>fd,line
fcntl.lockf(fd,fcntl.LOCK_UN)
fd.close()