0
#!/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します。ファイル内の行を解析して電子メール アドレスを取得する方法を知りたいです。

4

3 に答える 3

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);
于 2013-05-16T16:29:16.203 に答える
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);
于 2013-05-16T16:51:31.387 に答える
-2

または、正規表現を使用してメールを解析することもできます..

于 2013-05-17T13:17:09.630 に答える