web-dev-qa-db-fra.com

Connexion à Gmail via IMAP avec PHP - Echec du contexte SSL

J'essaie de me connecter à Gmail via IMAP avec PHP sous Apache. Ceci est sur un système Ubuntu 9.04. J'ai une sorte de problème de configuration PHP qui l'empêche de fonctionner. Tout d'abord, voici ce que j'ai fait pour configurer IMAP pour PHP:

Sudo apt-get install libc-client2007b libc-client2007b-dev
Sudo apt-get install php5-imap
Sudo /etc/init.d/Apache2 start

Lorsque j'exécute phpinfo (), j'obtiens les valeurs imap suivantes:

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

Voici mon exemple de code:

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

Lorsque j'exécute ce code, j'obtiens le résultat suivant:

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

Notez que je peux téléphoner à imap.gmail.com:993 depuis cet ordinateur. Je peux également connecter Evolution (lecteur de messagerie) à Gmail via IMAP et récupérer le courrier sans problèmes. Donc, je ne pense pas que ce soit un problème de pare-feu. Je suis à peu près sûr que quelque chose ne se trouve pas dans PHP correctement.

Des idées?

20
Clint Miller

Une autre chose que vous devez activer en PHP est l’extension OpenSSL . Il semble que la bibliothèque du client IMAP (avec SSL) en dépend.

Peu importe que le module OpenSSL soit activé dans Apache, car il est traité/traité avant que la demande ne soit transmise à PHP.

Le fil de discussion suivant peut vous aider à mieux comprendre:

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

11
Jordan S. Jones

Cela a fonctionné pour moi après un long effort:

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

J'étais confronté au même problème… .. J'utilise Windows et wamp et mon extension «openSSl» est activée.

J'ai supprimé ce problème en utilisant les étapes suivantes. J'espère que cela fonctionnera pour vous aussi.

1) Connecté via un navigateur sur un compte gmail. 

2) Ouvrez cette URL " https://www.google.com/settings/security/lesssecureapps "

3) Cliquez sur "allumer"

4) essayez de suivre le code 

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


?>

BONNE CHANCE. :) 

8
Adnan Ahmad

eu le même problème avec le domaine personnel sur Google Apps. Le problème a été résolu en modifiant l'accès de l'application au compte. Il suffit de suivre par lien et d’activer l’accès au compte.

3
Anton Danilov

Exécutez votre code à partir de la ligne de commande et voyez si php crache nos autres erreurs:

php -f gmail.php

Sur mon Ubuntu, j'ai fait:

Sudo apt-get install php5-imap

Et le système installé: libc-client2007b mlock libc-client2007b mlock php5-imap

Alors que diriez-vous de désinstaller php5 et de le réinstaller proprement.

1
Derick Schoonbee
  1. Tout d'abord, activez les applications moins sécurisées sur votre compte Gmail: https://myaccount.google.com/lesssecureapps enter image description here

  2. Utilisez cette configuration pour créer une connexion IMAP:

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

Note: INBOX est votre imbox principale. Vous pouvez par exemple accéder aux éléments envoyés avec: INBOX.Sent via votre connexion.

0
Esteban

Si vous rencontrez toujours des problèmes avec cela sur gmail, veillez à activer "Autoriser l'accès aux applications moins sécurisées" dans la page des paramètres de sécurité de vos comptes Google.

0
abdul01

Vérifiez votre configuration avec phpinfo() et assurez-vous que --with-imap-ssl est répertorié.

0
ayman