use strict;
use warnings;
use Net::IMAP::Simple;

$| = 1;

my $imap;
# open a connection to the IMAP server
$imap = new Net::IMAP::Simple('mail.foo.bar')
or die $imap->errstr();

# login
$imap->login('user', 'geheim')
or die $imap->errno(),$imap->errstr();

# select the desired folder
my $num = $imap->select('INBOX');

print $num," Nachrichten\n";

foreach $msg(1 .. $num) 
  {
  my @header = ();
  my @body   = ();
  my ($head, $line);
  print "Nachricht $msg: ";
  print $imap->seen($msg)?"  ":"* "; 
  # nachricht abrufen, als Arrayref
  $lines = $imap->get($msg);
  
  # Subject herausfiltern und ausgeben
  my ($subject) = grep(/Subject:/, @$lines);
  $subject =~ s/Subject: //;
  print $subject; 
  print "-" x 70,"\n";  
  
  # die Nachricht in Header und Body spalten
  $head = 1; # solange im Header 1, dann 0
  foreach $line(@$lines)
    {
    if ($head)
      {
      # leerzeite trennt Header und Body
      if ($line =~ /^\s*$/)
        { $head = 0; }
      else  
        { push(@header,$line); }
      }
    else
      { push(@body,$line); }
    }
  
  # Header und Body ausgeben
  print @header;
  print "." x 70,"\n";    # ...-Zeile dazwischen
  print @body;
  print "-" x 70,"\n";
  }

# close the connection
$imap->quit();

