#!/usr/bin/python from mailbox import * import sys class MyAddressList(rfc822.AddressList): """ fix a bug in the rfc822 class """ def __getitem__(self, index): return self.addresslist[index] def msgIdToURI(mid): return "mid:" + mid[1:-1] def writeAsRDF(stream, namehash, msghash): stream.write(""" """) for addr in namehash.keys(): names=namehash[addr] stream.write("\n") for alias in names: stream.write("") stream.write(alias) stream.write("\n") stream.write("\n\n") for addr in msghash.keys(): for (msgid, msgdate, msgsubj) in msghash[addr]: stream.write("\n") if msgsubj!=None: stream.write("") stream.write(msgsubj) stream.write("\n") stream.write("") stream.write(msgdate) stream.write("\n"); stream.write("\n") stream.write("\n\n") stream.write("\n") if __name__ == "__main__": box=UnixMailbox(sys.stdin) msg=box.next() realnames={} wrote={} while msg != None: # first, split out names adlist=MyAddressList(msg.getheader('From')) (fname, emailaddr)=adlist[0] if fname!='': if realnames.has_key(emailaddr): if realnames[emailaddr].count(fname)==0: realnames[emailaddr].append(fname) else: realnames[emailaddr]=[fname] # next, record what each person wrote if not wrote.has_key(emailaddr): wrote[emailaddr]=[] wrote[emailaddr].append((msg.getheader('Message-ID'), msg.getheader('Date'), msg.getheader('Subject'))) msg=box.next() # data extracted, time to serialize as RDF writeAsRDF(sys.stdout, realnames, wrote)