Foros del Web » Programando para Internet » PHP »

lista de carpetas con imap_list

Estas en el tema de lista de carpetas con imap_list en el foro de PHP en Foros del Web. Saludos Estoy tratando de conectar a un servidor pop3 para ver los correos. Conecto bien, obtengo los mensajes de la bandeja de entrada (inbox) pero ...
  #1 (permalink)  
Antiguo 02/11/2008, 09:27
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
lista de carpetas con imap_list

Saludos
Estoy tratando de conectar a un servidor pop3 para ver los correos.
Conecto bien, obtengo los mensajes de la bandeja de entrada (inbox) pero no puedo ver el resto de carpetas.
En el codigo que os pongo, obtengo un array con la carpeta INBOX, sin embargo, no consigo de ninguna manera obtener la lista completa de carpetas (SENT, TRASH, etc...).


El codigo:

Código php:
Ver original
  1. <?php
  2. /*
  3. Definimos las variables
  4. */
  5. $servidor = "{pop3.miservidor.net:110/pop3/notls}";
  6. $usuario = "[email protected]";
  7. $password = "mipass";
  8.  
  9. /*
  10. Conectamos con el servidor de correo.
  11. */
  12. $link = imap_open($servidor,$usuario,$password);
  13.  
  14. /*
  15. Obtener la lista de carpetas
  16. */
  17. $folder_list=imap_list($link, $servidor, "*");
  18.  
  19. /*
  20. Mostrar el array por pantalla
  21. */
  22. echo '<pre>';
  23. print_r($folder_list);
  24. echo '</pre>';
  25.  
  26. /*
  27. Cerramos la conexion
  28. */
  29. imap_close($link);
  30. ?>

Alguna idea de como seguir adelante ?

Gracias y un saludo
Marcos
  #2 (permalink)  
Antiguo 02/11/2008, 11:37
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: lista de carpetas con imap_list

mcf924:
Ya probastes imap_getmailboxes()?
Si eso aun no te soluciona creo que la libreria IMAP ha tenido muchos problemas.
Ejemplo: la version 5 de php que yo tengo con IMAP_MAIL() no he podido
hacer una conexion SSL con gmail.com.
Tambien cuando yo conecto con el servidor utilizando IMAP mi conexion luce asi:
$francoserver = imap_open("{" . $servidor . ":143}INBOX", $usuarioxgh, $clavex) or die("...);
Como puedes observar solicito una conexion directa con el INBOX, talvez seria bueno que probaras con SENT haber que pasa.
Sinceramente estaria muy interesado en tus resultados.
Buena suerte
Saludos
Franco
  #3 (permalink)  
Antiguo 03/11/2008, 03:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Respuesta: lista de carpetas con imap_list

Hola Franco,

Ya probe eso, y nada, no funciono.
Me parce que tendre que buscar la forma de NO utilizar la libreria IMAP de php.
He mirado varios clientes de webmail que existen por internet (mailbee, roundcube) y ninguno de ellos utiliza la libreria IMAP

Un saludo
Marcos
  #4 (permalink)  
Antiguo 03/11/2008, 10:32
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: lista de carpetas con imap_list

mcf924:
Acabo de probar esto que se encuentra en el manual de php:
<?php
//Respuesta:
//(0) {123.456.789.012:143}Drafts,'/',0
//(1) {123.456.789.012:143}INBOX,'/',0
//(2) {123.456.789.012:143}Sent Items,'/',0
//(3) {123.456.789.012:143}Trash,'/',0
$mbox = imap_open("{123.456.789.012:143}", "usuario", "contraseña", OP_HALFOPEN) or die("can't connect: " . imap_last_error());
$list = imap_getmailboxes($mbox, "{123.456.789.012:143}", "*");
if (is_array($list)) {
foreach ($list as $key => $val) {
echo "($key) ";
echo imap_utf7_decode($val->name) . ",";
echo "'" . $val->delimiter . "',";
echo $val->attributes . "<br />\n";
}
} else {
echo "imap_getmailboxes failed: " . imap_last_error() . "\n";
}
imap_close($mbox);
?>
El resultado te lo muestro arriba, por lo que
para abrir la carpeta de correos enviados en este caso mio especifico,
en vez de SENT debo usar Sent Items.
Asimismo, debes cambiar el dominio por la IP donde esta el servidor de correo para que funcione bien ya que probe con el dominio y se puso lento y eventualmente me dio error.
Saludos
Y espero te ayude.
Franco
P.S. Unicamente modifique la IP.
  #5 (permalink)  
Antiguo 03/11/2008, 14:10
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: lista de carpetas con imap_list

mcf924:
Este codigo me funciono bien para saber cuantos correos tengo en mi bandeja de ENVIADOS:
<?php
$francoserver = imap_open("{123.456.789.012:143}Sent Items", "usuario", "contraseña") or die("No Se Pudo Conectar Al Servidor:" . imap_last_error());
$cantidadmensajes = imap_num_msg($francoserver);
echo "<b>Hay $cantidadmensajes correo(s)<br>";
echo "<b>Bandeja De Enviados!<br>";
echo "<b>Usuario: ADMIN<br>";
echo "<b>Servidor:123.456.789.012";
imap_close($francoserver);
?>
Y este que sigue me dio el detalle completo de las cabeceras de cada uno de los mensajes que estaban en la bandeja de ENVIADOS.
<?php
$francoserver = imap_open("{123.456.789.012:143}Sent Items", "usuario", "contraseña") or die("No Se Pudo Conectar Al Servidor:" . imap_last_error());
$checar = imap_check($francoserver);
$resultados = imap_fetch_overview($francoserver,"1:{$checar->Nmsgs}",0);
foreach ($resultados as $detalles) {
echo "Numero Correo #: $detalles->msgno <br>";
echo "Fecha Correo: $detalles->date<br>";
echo "From: $detalles->from <br>";
echo "Para: $detalles->to <br>";
echo "Asunto: $detalles->subject<br>";
echo "Tamano: $detalles->size bytes<br>";
if($detalles->seen == "0") {
echo "<b>Mensaje NO Leido!.<br>";
} else {
echo "Mensaje Leido!.<br>";
}
$servidorenvia = strstr($detalles->message_id, '@');
echo "Servidor Que Envia: $servidorenvia<br>";
}
imap_close($francoserver);
?>
Pruebalos que funcionan muy bien
Saludos
Y espero continues con esta libreria que aunque en lo referente a SSL es deficiiente, por lo demas es muy util y practica.
Franco
P.S. Lo mas importante es lograr la conexion con el servidor y via dominios como mail.tudominio.com dificulta por cuanto primero se debe obtener los MX records y contactar un servidor de DNS, etc, etc. en cambio con la IP vas directo y mas rapido. Claro esta que esa IP debe tener acceso completo al servidor de correo y es lo que se llama "Relay permitted".
  #6 (permalink)  
Antiguo 04/11/2008, 03:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 31
Antigüedad: 19 años
Puntos: 0
Respuesta: lista de carpetas con imap_list

Hola de nuevo

Muchisimas gracias por tu ayuda
Por fin lo he conseguido.
He tenido que realizar algunas modificaciones sobre el codigo, ya que mi servidor requeria un parametro mas para la conexión, y es que despues del puerto imap (143) debia poner esto: /novalidate-cert

A esto hay que añadir el nombre de las carpetas, que en mi caso son:
INBOX
INBOX.Sent
INBOX.Drafts
INBOX.Trash
SPAM

Aqui pongo el código completo de conexion al servidor y listado de las carpetas que a mi me ha funcionado, si a alguien le puede ser de ayuda, entonces todo esto habra tenido sentido.
En el codigo he utilizado, tal y como me sugerias, la dirección IP del servidor IMAP (o POP3), si bien, utilizando el nombre del servidor (imap.miservidor.net) tambien me funcionaba
Es decir, la linea de:
$servidor = "{xxx.xxx.xxx.xxx:143/novalidate-cert}";
Tambien me ha funcionado poniendo:
$servidor = "{imap.miservidor.net:143/novalidate-cert}";

Gracias de nuevo por tu ayuda Franco

Un saludo
Marcos

Código php:
Ver original
  1. <?php
  2. /*
  3. Definimos variables
  4. */
  5. $servidor = "{xxx.xxx.xxx.xxx:143/novalidate-cert}";
  6. $usuario = "usuario";
  7. $password = "password";
  8.  
  9. /*
  10. Conectamos con el servidor de correo.
  11. */
  12. $link = imap_open($servidor,$usuario,$password) or die("No Se Pudo Conectar Al Servidor:" . imap_last_error());
  13.  
  14. /*
  15. Obtenemos la lista de carpetas
  16. */
  17. $carpetas=imap_list($link, $servidor, "*");
  18.  
  19. /*
  20. Iniciamos la salida al navegador
  21. */
  22. echo '<pre>';
  23. print_r($carpetas);
  24. echo '</pre>';
  25.  
  26. /*
  27. Cerramos la conexion con el servidor
  28. */
  29. imap_close($link);
  30. ?>

Última edición por mcf924; 04/11/2008 a las 06:24
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:14.