#! /home/tgolden/bin/python import os, sys import glob from datetime import datetime, date from mailbox import PortableUnixMailbox def generate_addresses (): mail_root = os.path.join (os.path.expanduser ("~"), "mail") folders = ['Personal', 'Python', 'Websites'] addresses = set () for folder in folders: folder_path = os.path.join (mail_root, folder) if not os.path.isdir (folder_path): print folder_path, "not found" continue for mailbox in os.listdir (folder_path): mailbox_path = os.path.join (folder_path, mailbox) print mailbox_path mbox = PortableUnixMailbox (open (mailbox_path, 'U')) for mail in mbox: name, address = mail.getaddr ("From") if address: addresses.add ((name, address)) name, address = mail.getaddr ("To") if address: addresses.add ((name, address)) addresses = set ((name, address) for (name, address) in addresses if "timgolden.me.uk" not in address) return addresses def one_person (fullname, email): if fullname: if " " in fullname: firstname, surname = fullname.rsplit (" ", 1) else: firstname, surname = fullname, "" yield "dn: cn=%s,mail=%s" % (fullname, email) else: firstname = surname = "" yield "dn: mail=%s" % email yield """objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson objectclass: mozillaAbPersonAlpha""" if fullname: yield "givenName: %s" % firstname yield "sn: %s" % surname yield "cn: %s" % fullname yield "mail: %s" % email yield "modifytimestamp: %s" % datetime.now ().strftime ("%Y%m%dT%H%M%SZ") def main (f): for fullname, email in generate_addresses (): if "undisclosed" in fullname.lower (): continue f.write ("\n".join (one_person (fullname, email))) f.write ("\n\n") if __name__ == '__main__': mail_root = os.path.join (os.path.expanduser ("~"), "mail") ldif_path = os.path.join (os.path.expanduser ("~"), "web", "timgolden.me.uk") for filename in glob.glob (os.path.join (ldif_path, "*.ldif")): os.remove (filename) ldif_filepath = os.path.join (ldif_path, date.today ().strftime ("%Y%m%d") + ".ldif") print "Writing to http://timgolden.me.uk/%s" % os.path.basename (ldif_filepath) main (open (ldif_filepath, "w"))