isearch
branchMail::IMAPTalk
changeset 12 db22b068b8cc
parent 11 87ddf3322246
--- a/isearch	Wed Dec 21 14:14:37 2011 +0100
+++ b/isearch	Mon Jan 02 11:53:59 2012 +0100
@@ -23,9 +23,12 @@
 use strict;
 use warnings;
 
+defined and /utf.*8/i and binmode(STDOUT, ":utf8") and last for @ENV{qw(LANG LC_CTYPE LC_ALL)};
+
 use Getopt::Long;
 use Pod::Usage;
 use Mail::IMAPTalk;
+use MIME::WordDecoder qw(unmime);
 
 sub folders($);
 
@@ -99,8 +102,8 @@
         my $e = $@;
 
         # skip folder with invalid name
-        if (   $e =~ /BAD Error in IMAP command EXAMINE: 8bit data in atom$/
-            or $e =~ /NO Invalid mailbox name: /) {
+        if (   $e =~ /Error in IMAP command EXAMINE: 8bit data in atom$/
+            or $e =~ /Invalid mailbox name: /) {
 
             warn "[WARN] Can't examine '$_': $e";
             print "Skipping $_ ...\n";
@@ -139,7 +142,7 @@
 
 }
 
-my @headers = qw(subject from to cc bcc date);
+my @headers = qw(Subject From To Cc Bcc Date);
 for my $f (sort keys %{$mids}) {
 
     my $m = $mids->{$f};
@@ -148,14 +151,15 @@
 
         $imap->examine($f)
           or die "Can't examine: " . $@ . "\n";
-        my $h = $imap->parse_headers($mids->{$f}, @headers)
-          or die "Can't get summaries: " . $@ . "\n";
+        my $envelopes = $imap->fetch($mids->{$f}, 'envelope')
+          or die "Can't get envelopes: " . $@ . "\n";
 
-        for my $id (keys %{$h}) {
+        for my $id (keys %{$envelopes}) {
 
             print "\n[$f] [$id]\n";
-            for my $hn (@headers) {
-                print ucfirst $hn . ": $_\n" for @{ $h->{$id}->{$hn} };
+            for my $h (@headers) {
+                my $v = unmime($envelopes->{$id}->{envelope}->{$h});
+                print ucfirst $h . ": $v\n" if $v;
             }
 
         }