Как я могу сохранить электронную почту в файл с Perl? - PullRequest
1 голос
/ 22 октября 2009

Я изучаю Perl и хочу создать простое приложение, которое получает все мои электронные письма и сохраняет их в файл, но как я могу это сделать? Спасибо.

Ответы [ 3 ]

6 голосов
/ 22 октября 2009

Раньше я использовал следующий скрипт для фильтрации помеченной SpamAssassin электронной почты перед переключением интернет-провайдеров:

#!/usr/bin/perl

use strict;
use warnings;

$| = 1;

use constant SEVERITY => 5;

use Mail::POP3Client;
use Term::ReadKey;

my $user = shift;

my $pop = Mail::POP3Client->new(
    HOST => '127.0.0.1', 
    PORT => 9999
);

my $pass = prompt_password();
print "\n";

$pop->User($user);
$pop->Pass($pass);
$pop->Connect or die $pop->Message;

my $count = $pop->Count;

$count >= 0 or die "Failed to get message count.\n";
$count >  0 or die "No messages in mailbox.\n";

my @to_delete;

print "Scanning messages:  ";

my $to_delete = 0;
for my $msg_num (1 .. $count) {
    my @headers = $pop->Head($msg_num);

    for my $h (@headers) {
        if($h =~ /^X-Spam-Level: (\*+)/) {
            if(SEVERITY <= length $1) {
                $to_delete += 1;
                $pop->Delete($msg_num);
                print "\b*>";
            } else {
                print "\b->";
            }
        }
    }
}

print "\b ... done\n";

use Lingua::EN::Inflect qw( PL );

if( $to_delete ) {
    printf "%d %s will be deleted. Commit: [Y/N]?\n",
        $to_delete, PL('message', $to_delete);
    $pop->Reset unless yes();
}

$pop->Close;

print "OK\n";

sub yes {
    while(my $r = <STDIN>) {
        $r = lc substr $r, 0, 1;
        return 1 if $r eq 'y';
        next unless $r eq 'n';
        last;
    }
    0;
}

sub prompt_password {
    print 'Password: ';
    ReadMode 2;
    my $pass = ReadLine 0;
    ReadMode 0;
    chomp $pass;
    return $pass;
}

Изменить это тривиально, чтобы сохранить сообщения. См. Mail :: POP3Client .

4 голосов
/ 22 октября 2009
3 голосов
/ 22 октября 2009

Ответ на практически любой такой вопрос: «Найдите нужный модуль в CPAN Search ».

Большинство модулей поставляются с примерами в документации и тестах.

Удачи,:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...