2013-03-26 2 views
2

Это как подключить йо GMail, используя Mail::IMAPClientНет содержания электронной почты с почтой :: IMAPClient

sub connectGMail 
{ 
    my $socket = IO::Socket::SSL->new 
    ( 
     PeerAddr => 'imap.gmail.com', 
     PeerPort => 993, 
     SSL_verify_mode => SSL_VERIFY_NONE 
    ) 
    or die "socket(): [email protected]"; 

    my $client = Mail::IMAPClient->new 
    (
     User  => 'whateverUser', 
     Password => 'aG00dP455w0rd' 
     Socket => $socket 
    ) 
    or die "Cannot connect ([email protected])\n"; 
    return $client; 
} 

Затем я передать этот объект клиента для processEmails подпрограммы

sub processEmails 
{ 
    my $client = shift; 

    if ($client->IsAuthenticated()) 
    { 
     $client->select('Pruebas'); 
     my @messages = $client->messages(); 
     my $mime_parser = getMIMEParser(); 
     my $filer = MIME::Parser::FileInto->new(); 
     mkdir(EXTRACT_DIR); 

     for(@messages) 
     { 
      my $msg_body = $client->message_string($_); 
      my $msg_subject = Encode::decode('MIME-Header', $client->subject($_)); 
      if ($msg_body) 
      { 
       my $dir = EXTRACT_DIR . "/" . $msg_subject; 
       $filer->init($dir); 
       mkdir($dir); 
       $mime_parser->filer($filer); 
       my $ok = parseEmail($mime_parser, $msg_body); 
       if ($ok) 
       { 
        print(STDERR "Email \"$msg_subject\" parsed OK\n"); 
       } 
      } 
      else 
      { 
       print(STDERR "No body for message with subject $msg_subject\n"); 
      } 
     } 
    } 
    else 
    { 
     print(STDERR "Something nasty happened\n"); 
    } 
} 

Проблема заключается в том, что $msg_body (retreived используя message_string) пуст для всех сообщений, но $msg_subject верен, что означает, что соединение в порядке. Вот результат:

No body for message with subject íQuÚ pasa! 
No body for message with subject Prueba con formateo HTML 
+0

попробовать '$ client-> body_string ($ _)' вместо 'message_string()' – imran

+0

Это работает , но мне нужны заголовки, чтобы разобрать его с помощью «MIME :: Parser». Название путается, я его отредактировал. – m0skit0

+0

Я не знаю, что делают 'getMIMEParser()' и 'parseEmail()'. Вы рассматривали метод 'parse_headers()' в 'Mail :: IMAPClient'? – imran

ответ

0

В общем, я думаю, было бы очень полезно, если вы пытаетесь включить работоспособный образец кода.

Я немного изменил ваш код, и для меня он работает просто отлично. У меня очень похожий код в моей базе кода.

use Mail::IMAPClient; 
use MIME::Parser::Filer; 

my $client = Mail::IMAPClient->new(
    Server => 'imap.gmail.com', 
    User  => '[email protected]', 
    Password => 'test-pass', 
    Ssl  => 1, 
    Uid  => 1, 
) or die "Cannot connect ([email protected])\n"; 

$client->select('INBOX'); 
my @messages = $client->messages(); 
my $filer = MIME::Parser::FileInto->new(); 
print "There are " . scalar @messages . " messages waiting.\n"; 

for (@messages) { 
    print "Processing...\n"; 
    my $msg_body = $client->message_string($_); 

    my $msg_subject = Encode::decode('MIME-Header', $client->subject($_)); 
    if ($msg_body) { 
     print "$msg_body\n"; 
     print(STDERR "Email \"$msg_subject\" parsed OK\n"); 
    } 
    else { 
     print(STDERR "No body for message with subject $msg_subject\n"); 
    } 
} 
+0

Спасибо за ваше время, я постараюсь проверить это, когда у меня будет время :) – m0skit0

0

Ран в тот же вопрос и был в состоянии исправить это с:

$client->Ignoresizeerrors(1)

Смежные вопросы