分页: 1 / 1

接收邮件附件的脚本。perl。

发表于 : 2008-07-12 19:05
solcomo
...大部分从这抄的
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;

发表于 : 2008-07-12 19:07
bones7456
:shock: :P

发表于 : 2008-07-12 19:08
HuntXu
收藏了先~

发表于 : 2008-07-12 19:09
eexpress
复杂了。何必

发表于 : 2008-07-12 19:12
solcomo
eexpress 写了:复杂了。何必
强烈要求ee说出简单的方法 :D

发表于 : 2008-07-12 19:15
eexpress
我一贯遵循人性化的原则。我那脚本就最简单了。脚本是为了方便使用的,挂fm或者热键才发挥最大效果。

发表于 : 2008-07-12 19:28
solcomo
:shock: 这个是接收的不是发送的...

发表于 : 2008-07-12 19:30
eexpress
穷到没客户端了?

发表于 : 2008-07-12 19:31
BigSnake.NET
eexpress 写了:穷到没客户端了?
其实发送用的也是客户端。。。

发表于 : 2008-07-12 19:36
solcomo
eexpress 写了:穷到没客户端了?
是没客户端
以前都是直接上网页 :lol:

发表于 : 2008-07-12 19:44
Tenyears
2n是什么?

发表于 : 2008-07-12 20:02
solcomo
就是2奶了 :lol:

发表于 : 2008-07-12 20:57
eexpress
BigSnake.NET 写了:
eexpress 写了:穷到没客户端了?
其实发送用的也是客户端。。。
球猫没老婆。理解不到我那脚本的意思。可球猫却有2n。