首先需要安装imap
apt-get install libmail-imapclient-perl
然后利用下面的脚本来搜索gmail的内容
#!/usr/bin/perl
# gmail-extract.pl - perl script for extraction of email addresses from GMail account
use strict;
use Mail::IMAPClient; # apt-get install libmail-imapclient-perl
use IO::Socket::SSL;
use Date::Parse;
use Getopt::Std;
sub usage {
print STDOUT "usage:n";
print STDOUT " ./gmail-extract.pl -u user@gmail.com -p passwordn";
print STDOUT " Optional arguments:n";
print STDOUT " -l label (parse messages with GMail label 'label' only)n";
print STDOUT " -f date_from (parse messages after 'date_from' date only)n";
print STDOUT " -t date_to (parse messages before 'date_to' date only)n";
exit;
}
my %opts;
getopt('uplft',%opts);
my $username = $opts{'u'} or usage();
my $password = $opts{'p'} or usage();
my $label = $opts{'l'}||'INBOX';
my $date_from = str2time($opts{'f'})||0;
my $date_to = str2time($opts{'t'})||time();
my $socket = IO::Socket::SSL->new(
PeerAddr => 'imap.gmail.com',
PeerPort => 993,
)
or die "socket(): $@";
my $client = Mail::IMAPClient->new(
Socket => $socket,
User => $username,
Password => $password,
)
or die "new(): $@";
if ($client->IsAuthenticated()) {
my $msgs = {};
my $emails = {};
$client->select($label);
$client->fetch_hash("RFC822.HEADER",$msgs) or die "Fetch hash error: ",$client->LastError,"n";
foreach my $m (keys %$msgs) {
$msgs->{$m}{"RFC822.HEADER"} =~ /Date: (.*)n/;
my $date = str2time($1);
$msgs->{$m}{"RFC822.HEADER"} =~ /Subject: (.*)n/;
my $from = $1;
if ($from =~ /.*<(.*)>/) { $from = $1; }
$emails->{$from} = $date;
};
foreach my $e (keys %$emails) {
if ($date_from < $emails->{$e} && $emails->{$e} < $date_to) { print STDOUT $e,"n"; }
};
}
$client->logout();
调用方法:
./gmail-extract.pl -u myaccount@gmail.com -p mypasswd -f 2012-1-1 -t 2012-8-1