Heh, thats kind of funny... I wrote one in Perl (my first real perl 
script) a few weeks ago to backup accounting info in a similar method 
(every day, keeping the most recent 30 days, and making monthly 
archives)  I wrote it in a fashion that (hopefully) is easy to 
customize.  It also emails the admin on failure (it does a diff on 
everything it copies).

If for any reason anyone wants it, they are more than welcome to it.

--mat

Shannon Roddy wrote:

>Hey folks,
>
>A while back I was looking for something to take a bunch of mbox
>format mail files and archive them in /year/month subdirectories. 
>Well... I never found anything I really liked, so Sunday I took an
>hour and wrote one.  What took the longest was finding all the info
>about the various python methods, etc.  For someone who does not do
>any python programming on a regular basis, I swear python makes things
>too easy.... This has become my language of choice when I need a
>homebrew solution.  I took a couple of ideas from a script that I
>found on the web, but the script is nearly from scratch.
>
>Any critiques are welcome, but this was just a quick and dirty script.
> The only problem I found was that various MTAs have poor date fomats,
>so some mail ends up in a subdirectory of 02 instead of 2002, etc. 
>Maybe I will address that later...  My next "todo" is to write a
>script that will go through my archives and delete duplicate
>messages...
>
>The script is run by simply typing "script_name source_mbox_file
>dest_directory".  Also, if the message is lacking a date, it goes in
>dest_directory/0/0.  I ran this on ~1GB of old imap folders and it
>took < 15 minutes on a Sun Blade 2000.
>
>Later, 
>Shannon
>
>#!/usr/bin/env python
>
>import mailbox, rfc822
>import sys, os, string, re, os.path
>
>LF = '\x0a'
>
>def main():
>       mailboxname_in = sys.argv[1]
>       mailboxdir_out = sys.argv[2]
>       process_mailbox (mailboxname_in, mailboxdir_out)
>
>def process_mailbox (mailboxname_in, mailboxdir_out):
>       mb = mailbox.UnixMailbox (file(mailboxname_in,'r'))
>       msg = mb.next()
>       while msg is not None:
>               if msg.getdate('Date') is not None:
>                       msg_date = msg.getdate('Date')
>               elif msg.getdate('Sent') is not None:
>                       msg_date = msg.getdate('Sent')
>               else:
>                        msg_date = (0 , 0)
>               msg_dir = mailboxdir_out + '/' + str(msg_date[0]) + '/' +
>str(msg_date[1]) + '/'
>               document = msg.fp.read()
>               write_message (msg, document, msg_dir)
>               msg = mb.next()
>
>
>
>def write_message (msg, document, msg_dir):
>       fname = msg_dir + 'mail.mbox'
>       if os.path.exists(msg_dir) is not True:
>               os.makedirs(msg_dir)
>       fout = file(fname, 'a')
>       fout.write(msg.unixfrom)
>       for i in msg.headers:
>               fout.write (i)
>       fout.write(LF)
>       fout.write(document)
>       fout.close()
>       
>if __name__ == '__main__':
>       main()
>
>_______________________________________________
>General mailing list
>[email protected]
>http://brlug.net/mailman/listinfo/general_brlug.net
>
>
>  
>

Reply via email to