2009-08-13 18 views
19

Próbuję połączyć się z Gmailem przez IMAP z PHP działającym w Apache. To jest na systemie Ubuntu 9.04. Mam problem z konfiguracją PHP, który uniemożliwia to działanie. Po pierwsze, oto co zrobiłem do instalacji IMAP dla PHP:Łączenie się z Gmailem przez IMAP z PHP - kontekst SSL nie powiodło się

sudo apt-get install libc-client2007b libc-client2007b-dev 
sudo apt-get install php5-imap 
sudo /etc/init.d/apache2 start 

Gdy uruchomię phpinfo(), otrzymuję następujące wartości IMAP:

IMAP c-Client Version: 2004 
SSL Support: enabled 
Kerberos Support: enabled 

Oto mój przykładowy kod:

<?php 
$connect_to = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; 
$user = 'my gmail address'; 
$password = 'my gmail password'; 

$connection = imap_open($connect_to, $user, $password) 
    or die("Can't connect to '$connect_to': " . imap_last_error()); 

imap_close($connection); 
?> 

Kiedy wykonać ten kod, pojawia się następujący komunikat:

Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX in /var/www/clint/gmail/gmail.php on line 10 
Can't connect to '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX': TLS/SSL failure for imap.gmail.com: SSL context failed 

Zauważ, że mogę telnetować na adres imap.gmail.com:993 z tego komputera. Mogę też podłączyć Evolution (czytnik poczty) do Gmaila przez IMAP i bez problemu pobrać pocztę. Więc nie sądzę, że jest to problem z firewallem. Jestem prawie pewien, że coś w PHP nie jest poprawnie skonfigurowane.

Wszelkie pomysły?

+0

UWAGA: Autor rozwiązać swój problem w dyskusji związanej przez Jordan, patrz http://groups.google.com/group/comp.lang.php/browse_thread/thread/241e619bc70a8bf4/bd3ae0c6a82409bc#e820c4fc3ee78ee3 –

+2

@Clint: odpowiedz lub edytuj własne pytanie zgodnie z rozwiązaniem, które znalazłeś –

Odpowiedz

10

Jeszcze jedną dodatkową rzeczą, którą potrzebujesz włączyć w PHP, jest OpenSSL extension. Wygląda na to, że biblioteka klienta IMAP (z SSL) jest od tego zależna.

Nie ma znaczenia, czy Apache ma włączony moduł OpenSSL, ponieważ jest przetwarzany/obsługiwany, zanim żądanie zostanie przekazane do PHP.

wątku dyskusja może pomóc rzucić nieco światła:

http://groups.google.com/group/comp.lang.php/browse_thread/thread/241e619bc70a8bf4/bd3ae0c6a82409bc?lnk=raot&pli=1

+0

Walcząc za pośrednictwem tego właśnie teraz; +1 dla końcówki OpenSSL. – Ben

+2

Otrzymuję podobne ostrzeżenia. jak ludzie to rozwiązaliście. OpenSSL jest włączony na moim serwerze. –

0

Sprawdź konfigurację za pomocą phpinfo() i sprawdź, czy na liście znajduje się --with-imap-ssl.

+0

Nie buduję samego PHP. Zainstalowałem go z apt-get. Wszystkie przeczytane przeze mnie blogi wskazują, że jeśli zrobię "apt-get install php5-imap", to zadziała. Być może muszę zrezygnować z tego podejścia i samodzielnie skompilować PHP. Spróbuję tego dziś wieczorem. –

+0

sprawdzenie, czy phpinfo() powie Ci czy SSL jest włączony. Wygląda na to, że nie można go już domyślnie dołączać. – TheJacobTaylor

+0

Trzeba OpenSSL w phpinfo (wierzę, że to, co jest za pomocą IMAP): openssl OpenSSL wsparcia \t włączoną OpenSSL Wersja \t OpenSSL 0.9.7i 14 października 2005 – TheJacobTaylor

1

Uruchom swój kod z linii poleceń i sprawdzić, czy php wypluwa nasze wszelkie inne błędy:

php -f gmail.php 

Na moim Ubuntu zrobiłem:

sudo apt-get install php5-imap 

a system zainstalowane: libc-client2007b MLOCK libc-client2007b mlock php5-imap

Jeśli chodzi o odinstalowanie php5 i ponowne zainstalowanie w czysty sposób.

9

ten pracował dla mnie po długim wysiłku:

$ServerName = "{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox"; 
+0

Windows Ultimate x64, Apache 2.2, PHP 5.2.8: '{imap.gmail.com:993/imap/ssl/novalidate-cert} INBOX' działa. – Ben

+0

Windows Vista x64, Apache 2.2, PHP 5.2.8: '{imap.gmail.com:993/imap/ssl/novalidate-cert} INBOX' działa. – Ben

0

Jeśli nadal masz problemy z tym na Gmail, włącz "Zezwalaj na dostęp dla mniej bezpiecznych aplikacji" na stronie ustawień zabezpieczeń kont Google.

+0

Miał problemy z SSL, 6 lat temu, nie problemy z logowaniem. – Max

+0

Mam podobny problem w ostatnim czasie i nawet po wypróbowaniu wszystkich wymienionych tu rozwiązań, dopiero na mojej stronie ustawień zabezpieczeń kont Google został włączony "Zezwalaj na dostęp dla mniej bezpiecznych aplikacji", dla których problem został rozwiązany, – abdul01

3

miał ten sam problem z osobistą domeną w aplikacjach google. Problem został rozwiązany poprzez zmianę dostępu aplikacji do konta. Po prostu postępuj zgodnie z by link i włącz dostęp ON do konta.

+0

pracował dla mnie, również przy użyciu domeny osobistej (Gmail dla firm) – Bryan

7

Miałem do czynienia z tym samym problemem. Używam okien i wampli, a moje wamp "openSSl" jest włączone.

Usunąłem ten problem, używając następujących kroków. Mam nadzieję, że to zadziała również dla Ciebie.

1) Zalogowano za pomocą przeglądarki do konta Gmail.

2) Otwórz ten link "https://www.google.com/settings/security/lesssecureapps"

3) Kliknij na "włącz"

4) spróbować następujący kod

<?php 

set_time_limit(4000); 


// Connect to gmail 
//$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX'; 
$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX'; 
$username = '[email protected]'; 
$password = 'Your-password'; 

// try to connect 
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 
    /* ALL - return all messages matching the rest of the criteria 
    ANSWERED - match messages with the \\ANSWERED flag set 
    BCC "string" - match messages with "string" in the Bcc: field 
    BEFORE "date" - match messages with Date: before "date" 
    BODY "string" - match messages with "string" in the body of the message 
    CC "string" - match messages with "string" in the Cc: field 
    DELETED - match deleted messages 
    FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set 
    FROM "string" - match messages with "string" in the From: field 
    KEYWORD "string" - match messages with "string" as a keyword 
    NEW - match new messages 
    OLD - match old messages 
    ON "date" - match messages with Date: matching "date" 
    RECENT - match messages with the \\RECENT flag set 
    SEEN - match messages that have been read (the \\SEEN flag is set) 
    SINCE "date" - match messages with Date: after "date" 
    SUBJECT "string" - match messages with "string" in the Subject: 
    TEXT "string" - match messages with text "string" 
    TO "string" - match messages with "string" in the To: 
    UNANSWERED - match messages that have not been answered 
    UNDELETED - match messages that are not deleted 
    UNFLAGGED - match messages that are not flagged 
    UNKEYWORD "string" - match messages that do not have the keyword "string" 
    UNSEEN - match messages which have not been read yet*/ 

// search and get unseen emails, function will return email ids 
$emails = imap_search($inbox,'UNSEEN'); 

$output = ''; 

foreach($emails as $mail) { 

    $headerInfo = imap_headerinfo($inbox,$mail); 

    $output .= $headerInfo->subject.'<br/>'; 
    $output .= $headerInfo->toaddress.'<br/>'; 
    $output .= $headerInfo->date.'<br/>'; 
    $output .= $headerInfo->fromaddress.'<br/>'; 
    $output .= $headerInfo->reply_toaddress.'<br/>'; 

    $emailStructure = imap_fetchstructure($inbox,$mail); 
    //var_dump($emailStructure->parts); 
    if(isset($emailStructure->parts)) { 
     $output .= imap_body($inbox, $mail, FT_PEEK); 
    } else { 
     //  
    } 
    echo $output; 
    $output = ''; 
} 

// colse the connection 
imap_expunge($inbox); 
imap_close($inbox); 


?> 

powodzenia. :)

+0

W przypadku, gdy ktoś inny zastanawia się, która odpowiedź naprawdę działa. Próbowałem tego i działało. – tormuto

+0

Otwórz ten adres URL "https://www.google.com/settings/security/lesssecureapps". Ta sprawa rozwiązała mój problem. –

0
  1. pierwsze, umożliwienie mniej bezpieczne aplikacje na koncie Gmail: https://myaccount.google.com/lesssecureappsenter image description here

  2. tej konfiguracji, aby utworzyć połączenie IMAP:

    $imap_connection = imap_open('{imap.gmail.com:993/imap/ssl/novalidate- 
    cert}INBOX', 'YOUR GMAIL USER', 'YOUR GMAIL PASSWORD'); 
    

Uwaga: Odebrane to twoje główne urządzenie, na przykład możesz uzyskać dostęp do wysłanych przedmiotów za pomocą: INBOX.Sent w swoim połączeniu.

Powiązane problemy