#!/usr/bin/perl -w use strict; use Getopt::Std; use Date::Manip qw( ParseDate Date_Cmp); use Mail::Box::Manager; my %opts = ( "i" => undef, "o" => undef, "f" => undef, "t" => undef ); getopts("i:o:f:t:", \%opts); die "Usage: $0 -i -o -f -t \n" unless ($opts{i} and $opts{o} and ( $opts{f} or $opts{t} ) ); my ($from_date, $to_date); $opts{f} and ( $from_date = ParseDate($opts{f}) or die "Bad from date: $opts{f}\n" ); $opts{t} and ( $to_date = ParseDate($opts{t}) or die "Bad to date: $opts{t}\n" ); my $mbm = Mail::Box::Manager->new(); my $inbox = $mbm->open($opts{i}, access => 'r') or die "Can't open $opts{i}\n"; my $outbox = $mbm->open($opts{o}, access => 'rw', create => 1) or die "Can't open $opts{o}\n"; my $i = 0; for my $msg ($inbox->messages) { my $msg_date = ParseDate($msg->date->body); if ( ( ( $from_date and Date_Cmp($from_date,$msg_date) <= 0 ) or ( ! $from_date ) ) and ( ( $to_date and Date_Cmp($msg_date,$to_date) < 0 ) or ( ! $to_date ) ) ) { $mbm->copyMessage($outbox, $msg); ++$i; } } $outbox->write(); print "Copied $i messages from $opts{i} to $opts{o}\n"; print "$opts{i} contains " . $inbox->messages . " messages.\n"; print "$opts{o} contains " . $outbox->messages . " messages.\n"; $inbox->close(); $outbox->close(); exit;