http://topic.csdn.net/u/20070213/16/acb ... 2073054200
需要安装模块
代码: 全选
sudo cpan MIME::Parser
代码: 全选
#!/usr/bin/perl -w
use strict;
use Net::POP3;
use MIME::Parser;
use MIME::Entity;
my $mailserver = "pop.163.com";
my $username = "aaaaaaaaaaaaaaaaaaaaaaaa";
my $password = "vvvvvvvvvvvvvvvvvvvvv";
if ($ARGV[0] && ($ARGV[0] =~ /--help|-h/i )) {
printf <<HELP;
cmail: Check mail and download the parts.
Usage:
cmail [OPTION]
Options:
NONE show all mails and download all parts in current directory.
-c show the total number of email.
-v show all mails.
-d delete all mails.
-h, --help show this message.
HELP
exit 0;
};
my $pop = Net::POP3->new($mailserver, Timeout => 60) or die "Failed to connect to $mailserver\n";
my $tot_msg = $pop->login($username, $password) or die "Failed to authenticate $username\n";
my $all = $pop->list or die "Failed to retreive list of avaible mseages\n";
my $parser = MIME::Parser->new;
printf("\n You are $tot_msg messages.\n\n");
printf("————————————————————————————————————————————————\n");
if ($ARGV[0] && ($ARGV[0] eq '-c' )) {
$pop->quit;
exit 0;
}
if ($ARGV[0] && $ARGV[0] eq '-d') {
my $msgnums = $pop->list;
foreach my $msgnum (keys %$msgnums) {
$pop->delete($msgnum);
}
$pop->quit;
exit 0;
}
foreach my $num (keys %$all) {
my $msg = $pop->get($num);
my $entity = $parser->parse_data($msg);
$entity->head->decode;
print "Subject: ",$entity->head->get('Subject');
print "From: ",$entity->head->get('From');
print "To: ",$entity->head->get('To');
print "Date: ",$entity->head->get('Date');
print "MIME: ",$entity->mime_type,"\n";
print "Parts: ",scalar $entity->parts,"\n";
for my $part ($entity->parts) {
print "\t ",$part->mime_type,"\t ",$part->bodyhandle,"\n";
}
my $numparts = $entity->parts;
if (!$numparts) {
my $body = $entity->bodyhandle();
my $content = join("", $body->as_lines);
$content = $content;
print "Text:\n";
print $content,"\n";
$body->purge;
}
else {
my $part_ent = $entity-> parts(0);
if ($part_ent->parts) {
$part_ent = $part_ent->parts(0);
}
my $body = $part_ent->bodyhandle();
my $content = join("", $body->as_lines);
$content = $content;
print "Text:\n";
print $content,"\n";
printf "------------------------------------------------\n";
}
if ($ARGV[0] && $ARGV[0] eq '-v') {
$entity->purge();
}
else {
for my $part ($entity->parts) {
my $body = $part->bodyhandle();
my $path = '';
if($body) {
$path = $body->path();
}
else {
$path = '';
}
print $path,"\n";
}
}
printf "————————————————————————————————————————————————\n";
}
$pop->quit;