2013-09-04 4 views
-1

я что прочитанный отправило 3 года назад здесь ->How can I read messages in a Gmail account from Perl?Как я могу прочитать тело сообщений в учетной записи Gmail из Perl?

Но я не могу открыть тело .. я уже прочитанного Net :: IMAP :: Простой и Email :: Simple; , Я пытаюсь это сделать ... но не работает, он печатает от и субъекта, но не тело.

use strict; 
use warnings; 

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

# fill in your details here 
my $username = '[email protected]'; 
my $password = 'pass'; 
my $mailhost = 'imap.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) }); 
    my $text = $es->body; 
    printf("[%03d] %s\n\t%s\n%s", $i, $es->header('From'), $es->header('Subject'),$text); 
    } 
} 


# Disconnect 
$imap->quit; 

exit; 

Эта гравюра:

[001] <[email protected]> 
    test subject 

Не тело электронной почты.

Может ли кто-нибудь решить эту проблему ???

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

+1

** Что означает «не работает»? ** «Не работает» - это неадекватное описание для понимания проблемы. Что случилось, когда вы попробовали? Вы получили сообщение об ошибке? Получили ли вы неправильные результаты? Вы получили * нет * результаты? Если результаты были неверными, что сделало их неправильными? Что вы ожидали вместо этого? Вы получили * любые * правильные результаты? Если да, то каковы они? Не заставляй нас гадать. –

+0

Извините. Когда я говорю, это не работает, я имею в виду, что результатов нет. Я вижу это и субъект, но не тело. – snnifer

+1

'$ es-> body;' vs 'es-> body' делает это исправление. – Doon

ответ

1

Вопрос заключается в том, что вы используете:

$imap->top($i) 

От the documentation (курсив мой):

Этот метод принимает номер сообщения в качестве своего необходимого параметра. Это сообщение будет извлечено из текущей выбранной папки. В успех этого метода возвращает ссылку на список , содержащую строки заголовок. Ничего не возвращается при ошибке, а ошибка errstr() с сообщением об ошибке.

top не возвращает тело сообщения. Для этого вам нужно использовать get. Что-то вроде этого:

my $es = Email::Simple->new(join '', @{ $imap->get($i) }); 
               ^^^ 
+0

Теперь работает отлично. Большое спасибо. – snnifer