use Mail::IMAPClient instead of Net::IMAP::Client because the latter will unconditionally reconnect in case of connection drops which is *not* always desired
--- a/isearch Wed Nov 02 14:19:50 2011 +0100
+++ b/isearch Wed Nov 02 15:07:14 2011 +0100
@@ -25,12 +25,12 @@
use Getopt::Long;
use Pod::Usage;
-use Net::IMAP::Client 0.95;
+use Mail::IMAPClient;
my $opts;
my %imapopts = (
- server => 'localhost',
- port => 143,
+ Server => 'localhost',
+ Port => 143
);
GetOptions(
@@ -44,21 +44,21 @@
-noperldoc => ( `perldoc -V 2>/dev/null`, $? != 0 )[-1]
);
},
- "password=s" => \$imapopts{pass},
- "p|port=s" => \$imapopts{port},
- "s|server=s" => \$imapopts{server},
- "u|user=s" => \$imapopts{user}
+ "password=s" => \$imapopts{Password},
+ "p|port=s" => \$imapopts{Port},
+ "s|server=s" => \$imapopts{Server},
+ "u|user=s" => \$imapopts{User}
) or pod2usage();
-defined $opts->{criteria} and defined $imapopts{user} or pod2usage();
+defined $opts->{criteria} and defined $imapopts{User} or pod2usage();
-if ( defined $imapopts{pass} ) {
+if ( defined $imapopts{Password} ) {
- if ( -r $imapopts{pass} ) {
+ if ( -r $imapopts{Password} ) {
- open P, '<', $imapopts{pass}
- or die "Can't open '$imapopts{pass}' for reading: $!\n";
- $imapopts{pass} = <P>;
- chomp $imapopts{pass};
+ open P, '<', $imapopts{Password}
+ or die "Can't open '$imapopts{Password}' for reading: $!\n";
+ $imapopts{Password} = <P>;
+ chomp $imapopts{Password};
}
@@ -68,19 +68,16 @@
use Term::ReadKey;
ReadMode 'noecho';
- $imapopts{pass} = ReadLine 0;
+ $imapopts{Password} = ReadLine 0;
ReadMode 0;
}
-my $imap = Net::IMAP::Client->new(%imapopts)
+my $imap = Mail::IMAPClient->new(%imapopts)
or die "Could not connect to IMAP server\n";
-$imap->login
- or die "Login failed: " . $imap->last_error . "\n";
-
-my @f = ( @ARGV or $imap->folders );
-die "Can't get folderlist: " . $imap->last_error . "\n" unless @f;
+my $f = ( @ARGV or $imap->folders );
+die "Can't get folderlist: " . $imap->LastError . "\n" unless $f;
my $mids;
@@ -90,16 +87,17 @@
next unless /volke.*2011/;
- print "\nExamining $_ ...";
+ print "Examining $_ ...\n";
$imap->examine($_)
- or die "Can't examine: " . $imap->last_error . "\n";
+ or die "Can't examine: " . $imap->LastError . "\n";
print "Searching $_ ...\n";
- my $m = $imap->search( $opts->{criteria}, undef, $opts->{charset} )
- or die "Can't search: " . $imap->last_error . "\n";
+ my $m = $imap->search( $opts->{criteria} )
+ or die "Can't search: " . $imap->LastError . "\n";
$mids->{$_} = $m;
}
+my @headers = qw(subject from to cc bcc date);
for ( sort keys %{$mids} ) {
my $m = $mids->{$_};
@@ -107,13 +105,16 @@
if ( @{$m} ) {
$imap->examine($_)
- or die "Can't examine: " . $imap->last_error . "\n";
- my $s = $imap->get_summaries( $mids->{$_} )
- or die "Can't get summaries: " . $imap->last_error . "\n";
+ or die "Can't examine: " . $imap->LastError . "\n";
+ my $h = $imap->parse_headers( $mids->{$_}, @headers )
+ or die "Can't get summaries: " . $imap->LastError . "\n";
- for ( @{$s} ) {
+ for my $id ( keys %{$h} ) {
- print $_->subject . "\n";
+ print "\n[$id]\n";
+ for my $hn (@headers) {
+ print ucfirst $hn . ": $_\n" for @{$h->{$id}->{$hn}};
+ }
}
@@ -158,10 +159,6 @@
The criteria to search for. See the section about the SEARCH command in the
IMAP RFC (3501 currently) for valid criteria.
-=item B<--charset> I<charset>
-
-Charset to use for IMAP Search. Defaults to UTF-8.
-
=item B<--password> I<password>
The password to use for authentication against the imap server. If this is the