#!/usr/bin/perl -w use constant VERSION => '1.03'; use strict; use Net::POP3; use Mail::Header; use Term::ReadPassword; use Getopt::Long; use lib "."; use Config::rc; my $filename = "~/.mcheckrc"; my $rcfile = new Config::rc( $filename ) or die $Config::rc::Error, "\n"; my $host = $rcfile->parm( "host" ) or die "Mail host not specified in $filename\n"; my $user = $rcfile->parm( "user" ) or die "User name not specified in $filename\n"; my $readno = 0; GetOptions( "r=i", \$readno ); my $password = read_password( "Password: " ) || exit 0; my $pop = Net::POP3->new( $host, Timeout=>30 ) or die "Can't connect to $host: $!\n"; my $messages = $pop->login( $user, $password ) or die "Can't log in: ", $pop->message, "\n"; my $last = $pop->last; $messages += 0; # In case it's "OEO" (zero but true) print "mcheck v", VERSION, ": Inbox has $messages messages (", $messages-$last," new)\n"; if ( ($readno > 0) && ($readno <= $messages) ) { my $lines = $pop->get($readno); print @$lines, "\n"; } else { for my $msgnum (reverse(1..$messages)) { my $header = $pop->top( $msgnum ); my $parsedhead = Mail::Header->new($header); chomp( my $subject = $parsedhead->get('Subject')); chomp( my $from = $parsedhead->get('From')); $from = clean_from($from); printf "%4d %-25s %-50s\n", $msgnum, $from, $subject; } # for } # else $pop->quit; sub clean_from { local $_ = shift; /^"([^\"]+)" <\S+>/ && return $1; /^([^<>]+) <\S+>/ && return $1; /^\S+ \(([^\)]+)\)/ && return $1; return $_; }