#!/usr/bin/perl -w
#
# maildir2mbox v0.1
# Copyright (C) 2004-11-16 Krzysztof Gibas <krzysztof(at)gibas org>
# 
# maildir2mbox - converts maildir mail box, to mbox style.
#

use strict;

my ($dirs, @dirs, $d, $file, $l, @lines, $from, $date, @date, $found);

if (@ARGV == 0) {
    print "Usage: $0 Maildir\n";
    exit;
}

my $maildir = $ARGV[0];

if ( ! -e $maildir) {
    print "Error: $maildir doesn\'t exist.";
    exit;
}
elsif ( ! -d $maildir) {
    print "Error: uhm... $maildir is not a dir.\n";
    exit;
}
    
@dirs = ('cur', 'new', 'tmp');

foreach $d(@dirs) {
    if (-d "$maildir/$d") {
	open(MAILBOX, ">maildir.$d.mbox") or die "Error: Can\'t create file maildir.$d.mbox\n";
	    opendir(DIR, "$maildir/$d") or die "Error: Can\'t open dir $maildir/$d: $!\n";
		while (defined($file = readdir(DIR))) {
		
		    open(FILE, "$maildir/$d/$file") or die "Error: Can\'t open file $maildir/$d/$file: $!\n";
			@lines = <FILE>;
		    close(FILE);

		    foreach $l(@lines) {
			if ($l =~ /^From:\s.*\@.*$/) {
			    $from = $l;
			    $found = 1;
			    last;
			}
		    }
		    foreach $l(@lines) {
			if ($l =~ /^Date:\s.+$/) {
			    $date = $l;
			    last;
			}
		    }
		    
		    if ($found) {
			chomp($from, $date);
			
			$date =~ s/\s+/ /g;
			$date =~ s/,//g;
			@date = split(/ /, $date);
			
			$from =~ s/\s+/ /g;
			if ($from =~ /^.*\<.+\@.+>.*$/) {
			    $from =~ s/.*\</From /g;
			    $from =~ s/\>.*//g;
			}
			else {
			    $from =~ s/://g;
			}
			
			print MAILBOX "$from  $date[1] $date[3] $date[2] $date[5] $date[4]\n";
			
			foreach $l(@lines) {
			    print MAILBOX $l;
			}
			
			print MAILBOX "\n\n";
		    }
		}
	    closedir(DIR);
	close(MAILBOX);
    }
    
    $from = $found = $date = "";
}


