open - Conexión a Gmail a través de IMAP con PHP-Falló el contexto SSL
imap_open(): couldn''t open stream (8)
Primero, habilite aplicaciones menos seguras en su cuenta de Gmail: https://myaccount.google.com/lesssecureapps
Utilice esta configuración para crear la conexión IMAP:
$imap_connection = imap_open(''{imap.gmail.com:993/imap/ssl/novalidate- cert}INBOX'', ''YOUR GMAIL USER'', ''YOUR GMAIL PASSWORD'');
Nota : INBOX es su imbox principal, por ejemplo, puede acceder a los elementos enviados con: INBOX. Enviado en su conexión.
Estoy intentando conectarme a Gmail a través de IMAP con PHP ejecutándose en Apache. Esto es en un sistema Ubuntu 9.04. Tengo algún tipo de problema de configuración de PHP que impide que esto funcione. Primero, esto es lo que hice para configurar IMAP para PHP:
sudo apt-get install libc-client2007b libc-client2007b-dev
sudo apt-get install php5-imap
sudo /etc/init.d/apache2 start
Cuando ejecuto phpinfo (), obtengo los siguientes valores de imap:
IMAP c-Client Version: 2004
SSL Support: enabled
Kerberos Support: enabled
Aquí está mi código de muestra:
<?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);
?>
Cuando ejecuto este código, obtengo el siguiente resultado:
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
Tenga en cuenta que puedo hacer telnet para imap.gmail.com:993 desde esta computadora. También puedo conectar Evolution (lector de correo) a Gmail a través de IMAP y recuperar el correo sin problemas. Por lo tanto, no creo que esto sea un problema de firewall. Estoy bastante seguro de que tengo algo en PHP no configurado correctamente.
¿Algunas ideas?
Compruebe su configuración con phpinfo()
y asegúrese de que vea --with-imap-ssl
listado.
Ejecute su código desde la línea de comandos y vea si php escupe nuestros otros errores:
php -f gmail.php
En mi Ubuntu hice:
sudo apt-get install php5-imap
Y el sistema instalado: libc-client2007b mlock libc-client2007b mlock php5-imap
Entonces, ¿qué hay de desinstalar php5 y volver a instalar limpiamente.
Esto me ha funcionado después de un largo esfuerzo:
$ServerName = "{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox";
Me enfrentaba al mismo problema. Estoy usando windows y wamp y mi extensión "openSSl" de wamp está habilitada.
Eliminé este problema usando los siguientes pasos. Espero que esto también funcione para usted.
1) Inicie sesión a través de navegador a la cuenta de gmail.
2) Abra esta url " https://www.google.com/settings/security/lesssecureapps "
3) Haga clic en "activar"
4) intenta seguir el código
<?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);
?>
LA MEJOR DE LAS SUERTES. :)
Otra cosa adicional que necesitas habilitar en PHP, es la extensión OpenSSL . Parece que la biblioteca del cliente IMAP (con SSL) depende de esto.
No importa si Apache tiene el módulo OpenSSL habilitado ya que esto se procesa / maneja antes de que la solicitud se entregue a PHP.
El siguiente hilo de discusión puede ayudar a arrojar algo de luz:
Si aún tienes problemas con esto en gmail, asegúrate de habilitar "Permitir acceso para aplicaciones menos seguras" en la página de configuración de seguridad de tus cuentas de Google.
Tenía el mismo problema con el dominio personal en las aplicaciones de Google. El problema se resolvió cambiando el acceso de la aplicación a la cuenta. Simplemente siga el https://www.google.com/settings/security/lesssecureapps y active el acceso a la cuenta.