Как я могу читать сообщения в учетной записи Gmail из Perl? - PullRequest
4 голосов
/ 27 марта 2010

Я использовал модуль Mail :: Webmail :: Gmail , чтобы читать новые сообщения в моей учетной записи Gmail.

Для этой цели я написал следующий код:

use strict;
use warnings;
use Data::Dumper;

use Mail::Webmail::Gmail;

my $gmail = Mail::Webmail::Gmail->new(
    username => 'username', password => 'password',
);


my $messages = $gmail->get_messages( label => $Mail::Webmail::Gmail::FOLDERS{ 'INBOX' } );


foreach ( @{ $messages } ) {
    if ( $_->{ 'new' } ) {
        print "Subject: " . $_->{ 'subject' } . " / Blurb: " . $_->{ 'blurb' } . "\n";
    }
}

Но это ничего не печатало.

Может кто-нибудь помочь мне в этом или предложить какой-нибудь другой модуль для этого?

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 01 апреля 2010

Это взято почти слово из слова из Сети :: IMAP :: Simple POD:

use strict;
use warnings;

# required modules
use Net::IMAP::Simple;
use Email::Simple;
use IO::Socket::SSL;

# fill in your details here
my $username = 'user@example.com';
my $password = 'secret';
my $mailhost = 'pop.gmail.com';

# Connect
my $imap = Net::IMAP::Simple->new(
    $mailhost,
    port    => 993,
    use_ssl => 1,
) || die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n";

# Log in
if ( !$imap->login( $username, $password ) ) {
    print STDERR "Login failed: " . $imap->errstr . "\n";
    exit(64);
}
# Look in the the INBOX
my $nm = $imap->select('INBOX');

# How many messages are there?
my ($unseen, $recent, $num_messages) = $imap->status();
print "unseen: $unseen, recent: $recent, total: $num_messages\n\n";


## Iterate through unseen messages
for ( my $i = 1 ; $i <= $nm ; $i++ ) {
    if ( $imap->seen($i) ) {
        next;
    }
    else {
    my $es = Email::Simple->new( join '', @{ $imap->top($i) } );

    printf( "[%03d] %s\n\t%s\n", $i, $es->header('From'), $es->header('Subject') );
    }
}


# Disconnect
$imap->quit;

exit;
3 голосов
/ 27 марта 2010

Вы можете использовать модуль Mail :: POP3Client . Используется для получения сообщения из учетной записи Gmail.

1 голос
/ 28 марта 2010

Вы пытались выполнить некоторую проверку ошибок после выполнения операции

if ($gmail->error())
{
    print $gmail->error_msg();
}

Я обнаружил, что когда я делаю это, это приводит к:

Ошибка: не удалось войти с теми учетные данные - не удалось найти окончательный URL Кроме того, ошибка HTTP: 200 ОК Ошибка: не удалось войти.

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

Что вы могли бы сделать, если вы не хотите просто загружать новые сообщения с помощью pop3, вы можете использовать Net :: IMAP :: Simple для доступа к учетной записи Gmail через IMAP

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