# HG changeset patch # User Matthias Förste foerste@schlittermann.de # Date 1325501639 -3600 # Node ID db22b068b8cca228e86635a82f2c9ca63452eb76 # Parent 87ddf3322246bfae5496871f37ccb312b8111da5 utf-8-ify stdout if locale env indicates utf8; Mail::IMAPTalk returns errormessages with the leading 'BAD' or 'NO' removed; adapt summary generation to Mail::IMAPTalk; unmime headers in summary; diff -r 87ddf3322246 -r db22b068b8cc isearch --- 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; } }