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?
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:
Cela a fonctionné pour moi après un long effort:
$ServerName = "{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox";
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. :)
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.
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.
Tout d'abord, activez les applications moins sécurisées sur votre compte Gmail: https://myaccount.google.com/lesssecureapps
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.
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.
Vérifiez votre configuration avec phpinfo()
et assurez-vous que --with-imap-ssl
est répertorié.