Perl Mail :: IMAPClient с IO :: Socket :: SSL-справка - PullRequest
2 голосов
/ 05 ноября 2010

Я работаю над сценарием Perl, который подключится к Gmail и загрузит все электронные письма.Не забывайте, что на данный момент я концентрируюсь только на подключении к Gmail, поэтому сценарий пока настроен для циклического перебора некоторых папок.Это то, что у меня есть до сих пор:

    #!/usr/bin/perl

use strict;
use warnings;
use Mail::IMAPClient;
use IO::Socket::SSL;

# Connect to IMAP via SSL and get rid of greeting message

my $socket = IO::Socket::SSL->new(
 PeerAddr  =>  'imap.gmail.com',
 PeerPort  => 993,
 )
 or die "Socket(): $@";

my $greeting = <$socket>;
my ($id, $answer) = split /\s+/, $greeting;
die "Problems loggin in: $greeting" if $answer ne 'OK';

# Build a client attached to the SSL Socket and login

my $client = Mail::IMAPClient->new(
 Socket => $socket,
 User => 'mail@gmail.com',
 Password => 'password',
 Port  => 993,
 )
 or die "new(): $@";

my ($code, $output) = ("","");
until( $code ) {
 $output = $client->_read_line or return undef;
 for my $o (@$output) {
  $client->_debug("Connect: Recieved this from readline: ".join("/",@$o)."\n");
  $client->_reord($client->Count,$o);
  next unless $o->[Mail::IMAPClient::TYPE] eq "OUTPU";
  ($code) = $o->[Mail::IMAPClient::DATA] =~ /^\*\s+(OK|BAD|NO)/i ;
 }
}

if($code =~ /BYE|NO /) {
 $client->State("Unconnected");
 die "IMAP server disconnected";
}

$client->login;

print "1";

$client->select('INBOX');
my @mails = ($client->seen(),$client->unseen);
foreach my $id (@mails) { print "$id\n"; }
# Terminate the connection with IMAP

$client->logout();

Однако, когда я запускаю скрипт, программа только долгое время сидит с мигающим курсором.Он не возвращает абсолютно никаких выходных данных или ошибок.У кого-нибудь есть предложения?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2013

Может быть стоит кричать, у меня была та же проблема, приводящая к подобным ошибкам, т.е. попытка команды, когда НЕ подключен!LastError: время ожидания 600 с для данных с сервера в /usr/share/perl5/Mail/IMAPClient.pm line 116

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

0 голосов
/ 05 ноября 2010

Возможно, вам будет проще использовать модуль, который выполняет IMAP с SSL.Я использовал Net :: IMAP :: Simple :: SSL и Mail :: Cclient для подключения к серверам IMAP через SSL, хотя я не пытался подключиться к Gmail.

Кроме того, я не использовал Mail :: IMAPClient , который вы используете, но, похоже, он поддерживает SSL и упоминает Gmail несколько раз в документации, поэтому он должен работатьбез необходимости создавать собственные сокеты SSL.

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