2009-08-13 2 views
19

Ich versuche, eine Verbindung zu Google Mail über IMAP mit PHP in Apache herzustellen. Dies ist auf einem Ubuntu 9.04 System. Ich habe eine Art von PHP-Konfigurationsproblem, das das nicht funktioniert. Erstens, hier ist was ich zu Setup IMAP tat für PHP:Herstellen einer Verbindung mit Google Mail über IMAP mit PHP - SSL-Kontext fehlgeschlagen

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

Als ich phpinfo run(), erhalte ich folgende imap Werte:

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

Hier ist mein Beispielcode:

<?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); 
?> 

Wenn ich diesen Code ausführen, bekomme ich die folgende Ausgabe:

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 

Beachten Sie, dass ich von diesem Computer aus auf Tel.:immail.gmail.com:993 telnet kann. Ich kann auch Evolution (Mailreader) über IMAP mit Google Mail verbinden und Mail ohne Probleme abrufen. Also, ich glaube nicht, dass dies ein Firewall-Problem ist. Ich bin mir ziemlich sicher, dass ich etwas in PHP nicht richtig eingerichtet habe.

Irgendwelche Ideen?

+0

HINWEIS: Autor sein Problem in der von Jordan verknüpft Diskussion gelöst, siehe http://groups.google.com/group/comp.lang.php/browse_thread/thread/241e619bc70a8bf4/bd3ae0c6a82409bc#e820c4fc3ee78ee3 –

+2

@Clint: Bitte beantworten oder editiere deine eigene Frage nach der gefundenen Lösung –

Antwort

10

Eine weitere zusätzliche Sache, die Sie in PHP aktiviert brauchen, ist die OpenSSL extension. Es scheint, dass die IMAP-Client-Bibliothek (mit SSL) davon abhängt.

Es spielt keine Rolle, ob Apache das OpenSSL-Modul aktiviert hat, da dieses verarbeitet/behandelt wird, bevor die Anfrage an PHP übergeben wird.

Die folgende Diskussion helfen, etwas Licht kann:

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

+0

durch dieses Recht jetzt kämpfen; +1 für den OpenSSL-Tipp. – Ben

+2

Ich bekomme ähnliche Warnungen. wie du es gelöst hast. OpenSSL ist auf meinem Server aktiviert. –

0

Überprüfen Sie Ihre Einrichtung mit phpinfo() und stellen Sie sicher, dass Sie --with-imap-ssl aufgelistet finden.

+0

Ich baue selbst kein PHP. Ich habe es mit apt-get installiert. Alle Blogs, die ich gelesen habe, zeigen an, dass es funktioniert, wenn ich "apt-get install php5-imap" mache. Vielleicht muss ich diesen Ansatz aufgeben und PHP selbst kompilieren. Ich werde es heute Abend versuchen. –

+0

Überprüfung phpinfo() wird Ihnen sagen, ob SSL aktiviert ist. Es klingt, als ob es nicht mehr standardmäßig enthalten sein könnte. – TheJacobTaylor

+0

Sie sollten openssl in phpinfo (ich glaube, dass ist das, was IMAP verwendet): openssl OpenSSL Unterstützung \t aktiviert OpenSSL Version \t OpenSSL 0.9.7i 14. Oktober 2005 – TheJacobTaylor

1

Führen Sie den Code aus der Befehlszeile und sehen, ob PHP unsere andere Fehler spuckt:

php -f gmail.php 

Auf meinem Ubuntu ich getan habe:

sudo apt-get install php5-imap 

und das System installiert ist: libc-client2007b mlock libc-client2007b mlock php5-imap

Dann wie über PHP php5 deinstallieren und neu installieren.

9

Das ist für mich nach einer langen Anstrengung gearbeitet hat:

$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' funktioniert. – Ben

+0

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

0

Wenn Sie immer noch Probleme mit diesem auf, die Aktivieren Sie in Google Mail die Option "Zugriff für weniger sichere Apps zulassen" auf der Seite mit den Sicherheitseinstellungen für Google-Konten.

+0

Er hatte SSL-Probleme, vor 6 Jahren, keine Login-Probleme. – Max

+0

Ich hatte kürzlich ein ähnliches Problem und selbst nachdem ich alle hier aufgelisteten d-Lösungen ausprobiert hatte, war es erst, als ich die Option "Zugriff für weniger sichere Apps zulassen" in meiner Google-Konten-Sicherheitseinstellungen-Seite – abdul01

3

hatte das gleiche Problem mit der persönlichen Domain in Google Apps. Das Problem wurde gelöst, indem der Anwendungszugriff auf das Konto geändert wurde. Folgen Sie einfach by link und schalten Sie den Zugriff auf das Konto ein.

+0

für mich bearbeitet hatte. auch mit persönlichen Domain (Gmail für Unternehmen) – Bryan

7

Ich hatte das gleiche Problem. Ich benutze Windows und Wamp und meine Wamp "openSSl" Erweiterung ist aktiviert.

Ich habe dieses Problem mit den folgenden Schritten behoben. Ich hoffe, dass dies auch für Sie funktioniert.

1) Über den Browser in das Google Mail-Konto eingeloggt.

2) Öffnen Sie diese URL "https://www.google.com/settings/security/lesssecureapps"

3) Klicken Sie auf "einschalten"

4) versuchen, Code folgende

<?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); 


?> 

viel Glück. :)

+0

Falls jemand anderes ist Wunder, welche der Antwort wirklich funktioniert. Ich habe es versucht und es hat funktioniert. – tormuto

+0

Öffnen Sie diese URL "https://www.google.com/settings/security/lesssecureapps". Dieses Ding hat mein Problem gelöst. –

0
  1. Aktivieren Sie zunächst weniger sichere Apps in Ihrem Google Mail-Konto: https://myaccount.google.com/lesssecureappsenter image description here

  2. Mit dieser Konfiguration IMAP-Verbindung zu erstellen:

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

Hinweis: INBOX ist Ihre Haupt-IMbox, zum Beispiel können Sie auf Artikel mit: INBOX.Sent in Ihrer Verbindung gesendet werden.