#!/usr/bin/perl

$inbox = shift(@ARGV) or die "Usage: $0 <mbox file> [year]\n";
$year = shift(@ARGV);

if (!($year =~ /[0-9]+/)) {
	print "Year to grab:\n";
	$year = <STDIN>;
	chomp $from;
}

#$/ = '';

open(MAIL,"$inbox");
open(OUT,">/tmp/$$.out");

my $tot = 0;
my $mtot = 0;
my $msg = "";

$lookahead = <MAIL>;

while ($_ = get_msg()) {
	if (/^From / && /(?:^From.*\s$year)/ 
		&& /\nMessage-id:/i && !(/^From MAILER-DAEMON /)) {
		$tot += length($_);
		$mtot++;
		print OUT $_;
	}
}

close(OUT);
close(MAIL);

print "Wrote $mtot messages ($tot bytes) to file /tmp/$$.out\n";

exit;


sub get_msg { 
	$msg = $lookahead;
	MSG: while ($lookahead = <MAIL>) {
		if (!($lookahead =~ /^From /)) {
			$msg .= $lookahead;
		}
		else {
			last MSG;
		}
	}
	return $msg;
}


# no lookahead.  has a tendency to drop msgs, i think
sub get_msg_no_look {

OUTER: while (<MAIL>) {
	if (/^From / && /(?:^From.*\s$from\n)/ && /\nMessage-id:/i) {
		$msg = "";
INNER: 		while (<MAIL>) {
			last INNER if /^From /;# Hit the end of the message
			$msg .= $_;
		}
		return $msg;
	}
}

}

