2010-03-02 4 views
3

Я установил модуль this для доступа и управления в почтовых ящиках Gmail. Однако, когда я пытаюсь подключиться через небольшой скрипт Perl и проверять функциональность, я получаю это сообщение об ошибке.Как выполнить проверку подлинности в Gmail с помощью Perl?

Error: Could not login with those credentials - could not find final URL 
    Additionally, HTTP error: 200 OK 

Это ошибка, построенная в модуле Gmail.pm.

Я могу проверить соответствующий URL (https://www.google.com/accounts/ServiceLoginBoxAuth), поэтому я чувствую, что проблема не находит URL-адрес. Кроме того, я знаю, что учетные данные верны и работают на этом URL-адресе, потому что я пробовал их вручную.

Я использую сценарий this для тестирования. Я предоставил свои учетные данные в соответствующих местах.


Я также установил модуль this с тем же самым типом ошибок.

Любая идея, почему я заблокирован?

+8

Это распределение не обновляется с 2006 года; За это время GMail сильно изменился. Почему бы просто не использовать IMAP? – friedo

+0

не видел этого 2006 года .... спасибо, что сообщили мне .... где я могу найти модуль IMAP? или мне даже нужен один – CheeseConQueso

+0

им не слишком любить доступ и парсинг почтовых ящиков, как вы могли заметить по моему последнему сообщению вопроса, которое было сбито – CheeseConQueso

ответ

12

Использование Mail::IMAPClient, как показано ниже. Чтобы получить SSL-аутентификацию через Mail :: IMAPClient, вы должны установить IO :: Socket :: SSL из Net :: SSLeay. Если так, это работает как шарм.

#!/usr/bin/env perl 
use strict; use warnings; 
use Mail::IMAPClient; 

# Connect to IMAP server 
my $client = Mail::IMAPClient->new(
    Server => 'imap.gmail.com', 
    User  => 'yourusername', 
    Password => 'yourp4a55w0r&', 
    Port  => 993, 
    Ssl  => 1, 
) 
    or die "Cannot connect through IMAPClient: $!"; 

# List folders on remote server (see if all is ok) 
if ($client->IsAuthenticated()) { 
    print "Folders:\n"; 
    print "- ", $_, "\n" for @{ $client->folders() }; 
}; 

# Say so long 
$client->logout(); 
+0

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

+0

Какие методы для синтаксического анализа сообщений? – CheeseConQueso

+0

nvm ...Я получил его – CheeseConQueso

2

Я успешно доступ к аккаунту Gmail (Google аккаунт Приложения быть точными) с помощью Mail :: POP3Client

+0

спасибо .. .. похоже, что он может подключаться (нет сообщений об ошибках), но он ничего не выводит в соответствии с первым примером кода, указанным в cpan – CheeseConQueso

+0

, вы включили доступ POP3 в свою учетную запись Gmail? PROTIP: если вы не хотите изменять состояние своего почтового ящика, используйте тег 'recent' в вашем uid: http://mail.google.com/support/bin/answer.py?hl=ru&answer= 47948 – coffeepac

+0

Да, это включено – CheeseConQueso

2

Если вы не можете получить доступ к Gmail с помощью обычных POP3 или IMAP либо, то у вас есть проблемы с конфигурацией, а не программирование проблема.

Принести свою почту из Gmail (на самом деле Google Apps, который использует тот же интерфейс), используя информацию о конфигурации, описанные здесь: (! Этот ответ является гораздо более подходящим для Super User хотя) http://download.gna.org/hpr/fetchmail/FAQ/gmail-pop-howto.html

0

Вы можете попытались с помощью следующего модуля

Mail::Webmail::Gmail 
+0

Это он и сделал. Но модуль, скорее всего, устарел. –

0

Вы можете использовать следующий код также

use warnings; 
use strict; 
use Mail::POP3Client; 
use IO::Socket::SSL; 
use CGI qw(:standard); 
my $cgi = new CGI; 
my $LOG ; 
open $LOG , ">>filename" ; 
my $username = '[email protected]'; 
my $password = '*******' ; 
chomp($password); 
my $mailhost = 'pop.gmail.com'; 
my $port  = '995'; 

$cgi->header(); 

my $pop = new Mail::POP3Client(
USER  => $username, 
PASSWORD => $password, 
HOST  => $mailhost, 
PORT  => $port, 
USESSL => 'true', 
DEBUG  => 0, 
); 
if (($pop->Count()) < 1) { 
exit; 
} 

print $pop->Count() . " messages found!:$!\n"; 

for(my $i = 1; $i <= $pop->Count(); $i++) { 
foreach($pop->Head($i)) { 
/^(From|Subject|Email):\s+/i && print $_, "\n"; 
} 

$pop->BodyToFile($LOG,$i); 

} 

$pop->Close(); 

exit;