#!/usr/bin/perl
#Author Leo
use Email::Address;
#use strict;
my $file = "/var/log/maillog";
my $string="msgif";
open(MAIL, $file);
my @buffer =<MAIL>;
close(MAIL);
my $lines=grep(/$string/, @buffer);
#print "@lines";
my @addresses = Email::Address->parse($lines);
print $addresses[0]->address;
这是我的代码。我是perl的新手我想知道如何使用Email::Address
来解析文件中的行,然后获取电子邮件地址。
答案 0 :(得分:3)
未测试:
#!/usr/bin/perl
use warnings;
use strict;
use Email::Address;
open(my $fh, '<', '/var/log/maillog')
or die "Cannot open /var/log/maillog: $!";
while (<$fh>) {
next unless /msgif/;
my @addrs = Email::Address->parse($_);
foreach my $addr (@addrs) {
print "$addr\n";
}
}
close($fh);
答案 1 :(得分:2)
使用File::Slurp
和Email::Find
的另一个想法。您可以定义搜索并将其实现到此中。
use strict;
use warnings;
use Email::Find;
use File::Slurp;
my @addresses;
my $wanted = Email::Find->new(
sub {
my ($email, $old) = @_;
push @addresses, $email->format;
});
my $data = read_file('/var/log/maillog');
$wanted->find(\$data);
print join("\n", @addresses);
答案 2 :(得分:-2)
或者您可以使用正则表达式来解析电子邮件..