2009-08-13 11 views
19

J'essaie de me connecter à Gmail via IMAP avec PHP en cours d'exécution dans Apache. C'est sur un système Ubuntu 9.04. J'ai une sorte de problème de configuration de PHP qui empêche cela de fonctionner. Tout d'abord, voici ce que je l'ai fait pour IMAP de configuration pour PHP:Connexion à Gmail via IMAP avec PHP - Le contexte SSL a échoué

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

Quand je lance phpinfo(), je reçois 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 la sortie suivante:

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 telnet à imap.gmail.com:993 à partir de cet ordinateur. Je peux également raccorder Evolution (lecteur de courrier) à 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 sûr que j'ai quelque chose en PHP qui n'est pas configuré correctement.

Des idées?

+0

REMARQUE: Auteur résolu son problème dans la discussion liée par la Jordanie, voir http://groups.google.com/group/comp.lang.php/browse_thread/thread/241e619bc70a8bf4/bd3ae0c6a82409bc#e820c4fc3ee78ee3 –

+2

@Clint: S'il vous plaît répondre ou éditez votre propre question selon la solution que vous avez trouvée –

Répondre

10

Une autre chose supplémentaire dont vous avez besoin activé en PHP, est le OpenSSL extension. Il semble que la bibliothèque du client IMAP (avec SSL) en dépend.

Peu importe si Apache a activé le module OpenSSL car il est traité/géré avant que la demande ne soit transmise à PHP.

Le fil de discussion suivant peut aider à faire la lumière:

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

+0

par ce Luttant en ce moment; +1 pour l'astuce OpenSSL – Ben

+2

Je reçois des avertissements similaires. comment vous les avez résolus. OpenSSL est activé sur mon serveur. –

0

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

+0

Je ne construis pas PHP moi-même. Je l'ai installé avec apt-get. Tous les blogs que j'ai lus indiquent que si je fais "apt-get install php5-imap" alors ça marchera. Peut-être que je dois abandonner cette approche et compiler PHP moi-même. Je vais essayer ça ce soir. –

+0

La vérification de phpinfo() vous indiquera si SSL est activé. Cela semble ne plus être inclus par défaut. – TheJacobTaylor

+0

Vous devriez avoir OpenSSL dans phpinfo (je crois que est ce que IMAP utilise): OpenSSL support OpenSSL \t permis OpenSSL Version \t OpenSSL 0.9.7i 14 octobre 2005 – TheJacobTaylor

1

exécuter votre code de la ligne de commande et voir si php recrache nos autres erreurs:

php -f gmail.php 

Sur mon Ubuntu, je l'ai fait:

sudo apt-get install php5-imap 

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

Ensuite, que diriez-vous de désinstaller php5 et de réinstaller proprement.

9

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

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

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

+0

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

0

Si vous rencontrez toujours des problèmes avec cela sur gmail, assurez-vous d'activer "Autoriser l'accès aux applications moins sécurisées" sur la page des paramètres de sécurité de votre compte google.

+0

Il avait des problèmes de ssl, il y a 6 ans, pas de problèmes de connexion. – Max

+0

J'ai eu un problème similaire récemment et même après avoir essayé toutes les solutions énumérées ici ce n'est que lorsque j'ai activé "Autoriser l'accès pour les applications moins sécurisées" dans ma page des paramètres de sécurité des comptes google – abdul01

3

avait le même problème avec le domaine personnel sur google apps. Le problème a été résolu en changeant l'accès de l'application au compte. Suivez simplement by link et activez l'accès au compte.

+0

a travaillé pour moi, également en utilisant le domaine personnel (Gmail pour les affaires) – Bryan

7

Je faisais face au même problème. J'utilise windows et wamp et mon extension wamp "openSSl" est activée.

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

1) Connecté via le navigateur au compte Gmail.

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

3) Cliquez sur "activer"

4), essayez le code suivant

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


?> 

MEILLEUR DE CHANCE. :)

+0

Dans le cas où quelqu'un d'autre est étonnant qui de la réponse fonctionne vraiment. Je l'ai essayé et ça marche. – tormuto

+0

Ouvrez cette adresse "https://www.google.com/settings/security/lesssecureapps". Cette chose a résolu mon problème. –

0
  1. En premier lieu, permettre des applications moins sécurisées dans votre compte Gmail: https://myaccount.google.com/lesssecureappsenter 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'); 
    

Remarque: INBOX est votre imbox principal, par exemple vous pouvez accéder aux éléments envoyés avec: INBOX.Envoyé dans votre connexion.