;
+ chomp $imapopts{pass};
+
+ }
+
+} else {
+ print "\nPassword:";
+
+ use Term::ReadKey;
+
+ ReadMode 'noecho';
+ $imapopts{pass} = ReadLine 0;
+ ReadMode 0;
+
+}
+
+my $imap = Net::IMAP::Client->new(%imapopts)
+ or die "\nCould not connect to IMAP server";
+
+$imap->login
+ or die "\nLogin failed: " . $imap->last_error;
+
+my @f = ( @ARGV or $imap->folders );
+die "\nCan't get folderlist: " . $imap->last_error unless @f;
+
+my $mids;
+
+print "\n";
+$| = 1;
+
+for (@f) {
+
+ next unless /volke.*2011/;
+
+ print "\nExamining $_ ...";
+ $imap->examine($_)
+ or die "\nCan't examine: " . $imap->last_error;
+ print "\nSearching $_ ...";
+ my $m = $imap->search( $opts->{criteria}, undef, $opts->{charset} )
+ or die "\nCan't search: " . $imap->last_error;
+ $mids->{$_} = $m;
+
+}
+
+for ( sort keys %{$mids} ) {
+
+ my $m = $mids->{$_};
+
+ if ( @{$m} ) {
+
+ $imap->examine($_)
+ or die "\nCan't examine: " . $imap->last_error;
+ my $s = $imap->get_summaries( $mids->{$_} )
+ or die "\nCan't get summaries: " . $imap->last_error;
+
+ for ( @{$s} ) {
+
+ print "\n" . $_->subject;
+
+ }
+
+ }
+
+}
+
+print "\nDone\n";
+
+__END__
+
+=pod
+
+=head1 NAME
+
+isearch - search mailbox(es) on imap server
+
+=head1 SYNOPSIS
+
+isearch -c|--criteria criteria
+ [--charset charset]
+ [--password password]
+ [-p|--port port]
+ [-s|--server host]
+ -u|--user user
+ [mailbox1 [mailbox2 .. ]]
+
+isearch -m|--man
+ -h|--help
+
+=head1 DESCRIPTION
+
+Search through one or more imap mailbox(es). If no mailbox is specified then
+every mailbox will be searched.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-c|--criteria> I