2013-03-06 23 views
5

Muszę połączyć się z kontem Gmail przez IMAP przy użyciu numeru PHP. Mam niektóre kodu pracy, ale podczas próby nawiązania połączenia, pojawia się następujący błąd:połączyć Gmail przez php imap? błąd lokalnego certyfikatu wystawcy

Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/ssl}[Gmail]/All Mail in /home/demoosiz/public_html/goqlue/email.php on line 31
Cannot connect to Gmail: Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=Google Inc/CN=Google Internet Authority

mój kod jest poniżej

<?php 
    /* connect to gmail */ 
    $hostname = '{imap.gmail.com:993/ssl}[Gmail]/All Mail'; 
    $username = 'hidden'; 
    $password = 'hidden'; 

    /* try to connect */ 
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error()); 

    /* grab emails */ 
    $emails = imap_search($inbox,'ALL'); 

    /* if emails are returned, cycle through each... */ 
    if($emails) { 

     /* begin output var */ 
     $output = ''; 

     /* put the newest emails on top */ 
     rsort($emails); 

     /* for every email... */ 
     foreach($emails as $email_number) { 

     /* get information specific to this email */ 
     $overview = imap_fetch_overview($inbox,$email_number,0); 
     $message = imap_fetchbody($inbox,$email_number,2); 

     /* output the email header information */ 
     $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">'; 
     $output.= '<span class="subject">'.$overview[0]->subject.'</span> '; 
     $output.= '<span class="from">'.$overview[0]->from.'</span>'; 
     $output.= '<span class="date">on '.$overview[0]->date.'</span>'; 
     $output.= '</div>'; 

     /* output the email body */ 
     $output.= '<div class="body">'.$message.'</div>'; 
     } 

     echo $output; 
    } 

    /* close the connection */ 
    imap_close($inbox); 
    ?> 
+0

ty testowania w XAMPP? – Iraklis

+0

Czy właśnie wpisałeś login i hasło do swojego konta pocztowego? –

+0

Tak, zrobił to. Przesłano już poprawkę, aby go usunąć. – Iraklis

Odpowiedz

6

To wydaje się być kwestią certyfikat.

Nie powiem ci, co to za wydanie certyfikatu, ani jak go rozwiązać.

Jednak można zostawić swoje konto gmail otwarty na ataki przez ignorowanie tego problemu wyłączenie sprawdzania poprawności certyfikatu:

$hostname = '{imap.gmail.com:993/ssl/novalidate-cert}[Gmail]/All Mail'; 
+3

Nie rozwiązuje problemów z certyfikatami przez * ignorowanie * certyfikatów. To bardzo zła praktyka. I prawie tak samo, jak zapewnienie haseł w postaci zwykłego tekstu. – hakre

+0

Zgadzam się, ale z ograniczonymi informacjami z PO, dzieje się tak zazwyczaj w XAMMP. Jeśli spróbuje tego i to zadziała, będzie mógł dalej zajmować się tym, np. Ładując certyfikaty z pliku. – Iraklis

+0

Edytowałem twoją odpowiedź, sprawdź, czy to lepiej odzwierciedla to, co chcesz zasugerować. Próbowałem użyć języka, który jest łatwy do zrozumienia, ale możesz go uznać za urażony. – hakre

3

Cannot connect to Gmail: Certificate failure for imap.gmail.com: unable to get local issuer certificate: /C=US/O=Google Inc/CN=Google Internet Authority

Układ wykonać kod na brakuje to świadectwo. Nie można o tym więcej powiedzieć na podstawie informacji podanych w pytaniu. Zapoznaj się z dokumentacją systemową systemu operacyjnego, w jaki sposób zainstalować certyfikaty i jak uzyskać wymagany certyfikat.

Zobacz także: