Foros del Web » Programando para Internet » PHP »

Bajar contenido integro del mensaje vía IMAP

Estas en el tema de Bajar contenido integro del mensaje vía IMAP en el foro de PHP en Foros del Web. Hola, Sabéis de que manera tengo que hacer para conseguir el mensaje integro con todas sus partes y adjuntos? Resulta que he llegado a conseguir ...
  #1 (permalink)  
Antiguo 14/09/2009, 09:55
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Bajar contenido integro del mensaje vía IMAP

Hola,

Sabéis de que manera tengo que hacer para conseguir el mensaje integro con todas sus partes y adjuntos?

Resulta que he llegado a conseguir el mensaje si solo tiene una parte o si el mensaje es respondido. Sin embargo, si reenvío el mensaje no consigo leer el cuerpo original.

Estoy bastante desesperado! xD

Alguien que tenga experiencia en el tema?
  #2 (permalink)  
Antiguo 14/09/2009, 10:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Bajar contenido integro del mensaje vía IMAP

imap_body te devuelve todo el cuerpo del mensaje, la unica desventaja es que tu lo debes de analizar por tu parte, al contrario de usar imap_fetchbody y imap_fetchstructure.

Saludos.
  #3 (permalink)  
Antiguo 14/09/2009, 11:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Bajar contenido integro del mensaje vía IMAP

Cita:
Iniciado por GatorV Ver Mensaje
imap_body te devuelve todo el cuerpo del mensaje, la unica desventaja es que tu lo debes de analizar por tu parte, al contrario de usar imap_fetchbody y imap_fetchstructure.

Saludos.
Me estoy volviendo loco GatorV, con la función imap_body efectivamente cojo todo el cuerpo, cabeceras, adjunto, todo...

Pero es mas difícil tratarlo no?!

Si lo que quisiera sería tener es lo siguiente:
Una tabla con los correos ordenados por fecha de llegada y que al visualizar el contenido de cada uno de ellos me apareciese la siguiente información, dependiendo del tipo de mensaje.

Llega un mensaje nuevo, sin adjuntos ni nada (muestro)
Origen, destino, hora, asunto y cuerpo

Llega un mensaje con una respuesta (muestro)
Respuesta desde: origen, destino, hora, asunto y cuerpo
Mensaje original: origen, destino, hora, asunto y cuerpo

Si tuviera más respuestas o adjuntos (muestro)
Respuesta desde: origen, destino, hora, asunto y cuerpo
Respuesta desde: origen, destino, hora, asunto y cuerpo
Respuesta desde: origen, destino, hora, asunto y cuerpo
Mensaje original: origen, destino, hora, asunto y cuerpo
adjunto: prueba.doc

El siguiente código te muestra la tabla de correos (sin ordenar, porque no he conseguido juntar las lineas de la 20 a la 26 dentro del bucle que genera la tabla.
Es decir, la función ordenar por separado me funciona, pero no se como introducirla dentro del bucle que va imprimiendo la tabla.

Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Chequear cuenta de correo</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <link href="imap_css.css" rel="stylesheet" type="text/css" media="all" />
  7.  
  8. </head>
  9. <body>
  10. <h1 class="titulo"> Webmail BETA </h1>
  11.  
  12. <?
  13. $imap = imap_open ("{imap.gmail.com:993/imap/ssl}INBOX", "[email protected]", "PASS") or die("No Se Pudo Conectar Al Servidor:" . imap_last_error());
  14. $checar = imap_check($imap);
  15.  
  16. // Detalles generales de todos los mensajes del usuario.
  17. $resultados = imap_fetch_overview($imap,"1:{$checar->Nmsgs}",0);
  18. $messages = imap_sort($imap, SORTARRIVAL, 1);
  19.  
  20. echo "<pre>";
  21. foreach ($messages as $message) {
  22.     $header = imap_header($imap, $message);
  23.     $prettydate = date("jS F Y", $header->udate);
  24.     print "{$header->fromaddress} - $prettydate\n";
  25. }
  26. echo "</pre>";
  27.  
  28. $cont = 0;
  29.  
  30. // Informacion del mailbox
  31. $check = imap_mailboxmsginfo($imap);
  32.  
  33. echo "<div class='estadisticas'>";
  34. if ($check) {
  35.     echo "Fecha: "     . $check->Date    . "<br/>" ;
  36.     //echo "Driver: "   . $check->Driver  . "<br />\n" ;
  37.     //echo "Mailbox: "  . $check->Mailbox . "<br />\n" ;
  38.     echo "Total Mensajes: $check->Nmsgs | Sin Leer: $check->Unread | Recientes: $check->Recent | Eliminados: $check->Deleted <br/>";
  39.     echo "Tamaño buzón: " . $check->Size . "<br/><br/>" ;
  40. } else {
  41.     echo "imap_check() failed: " . imap_last_error() . "<br />\n";
  42. }
  43. echo "</div>";
  44.  
  45. // MOSTRAMOS EL MENSAJE
  46. echo "-------------------------------------------------------<br />";
  47. if (isset($_GET['num'])){
  48.     $num_mensaje=$_GET['num'];
  49.     echo "Mostrando cuerpo del mensaje #$num_mensaje<br/>";
  50.     $cont=0;
  51.     foreach ($resultados as $detalles) {
  52.         $cont = $cont + 1;
  53.         if ($cont == $num_mensaje){
  54.             $asunto=$detalles->subject;
  55.             echo "<p class='asunto'>$asunto</p>";}
  56.     }
  57.  
  58.     $section = 1;
  59.     $mensaje = imap_fetchbody($imap, $num_mensaje, $section);
  60.     echo nl2br(strip_tags($mensaje,'<p>')); // Util para los mensajes HTML, los transforma en texto plano
  61.    
  62. }else{
  63.     echo "Mensaje no encontrado<br/>";
  64. }
  65. echo "<br />-------------------------------------------------------<br />";
  66.  
  67. ?>
  68. <table class='tabla1'>
  69. <thead>
  70.     <tr>
  71.         <th scope="col" title="Mensaje">Msj</th>
  72.         <th scope="col" title="Remitente">Remitente</th>
  73.         <th scope="col" title="Asunto">Asunto</th>
  74.         <th scope="col" title="Tamaño">Tamaño</th>
  75.         <th scope="col" title="Fecha">Fecha</th>
  76.         <th scope="col" title="Adjunto">Adjunto</th>
  77.         <th scope="col" title="Leido">Leido</th>
  78.     </tr>
  79. </thead>   
  80. <?
  81. //$i=0;
  82. foreach ($resultados as $detalles) {
  83.     echo "<tr>";
  84.     //echo "Para: $detalles->to <br>";
  85.    
  86.     // Ponemos 'Sin asunto' en caso que no tenga.
  87.     if ($detalles->subject == ''){$subject='Sin asunto';}
  88.     else{
  89.         //Evita asuntos tipo =?ISO-8859-1?Q?B=F8lla?=
  90.         $subject = utf8_decode(imap_utf8($detalles->subject));
  91.     }
  92.     $from = utf8_decode(imap_utf8($detalles->from));
  93.    
  94.     // Mirar si tiene adjuntos
  95.     $msg_structure = imap_fetchstructure($imap, $detalles->msgno);
  96.    
  97.     echo "<td><b>#$detalles->msgno</b></td>";
  98.     echo "<td><b>$from</b></td>";
  99.     echo "<td><a href='correo_imap.php?num=$detalles->msgno'><b>$subject</b></a></td>";
  100.     //echo "<td><a href='mostrar_correo.php?msj=$detalles->msgno'><b>$subject</b></a></td>";
  101.     echo "<td><b>$detalles->size bytes</b></td>";
  102.     echo "<td><b>$detalles->date</b></td>";
  103.    
  104.     if($msg_structure->bytes == "")
  105.     {echo "<td><b>No</b></td>";}
  106.     else{echo "<td><b>Sí</b></td>";}
  107.    
  108.     if($detalles->seen == "0") {
  109.         echo "<td><b>Sin leer</b></td>";
  110.         $cont = $cont + 1;
  111.     } else {
  112.         echo "<td>Leido</td>";
  113.     }
  114.    
  115.     //$servidorenvia = strstr($detalles->message_id, '@');
  116.     //echo "Dominio Que Envia: $servidorenvia<br><hr>";
  117.     echo "</tr>";
  118. }
  119. echo "</table>";
  120.  
  121. imap_close($imap);
  122. ?>
  123. <div id="footer"> <p>Tratamiento de correo via IMAP - BETA 1.0</p></div>
  124. </body>
  125. </html>

Muchas gracias de antemano!
  #4 (permalink)  
Antiguo 15/09/2009, 10:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Bajar contenido integro del mensaje vía IMAP

En ese caso deberías almacenar en otro lado los mensajes como en una base de datos relacional donde los puedas ordenar de esa forma, ya que la forma de ordenarlos por defecto de IMAP es solo por fechas.

Lo que tu buscas es un threaded view, como el de Gmail y ese lo tienes que programar por aparte, el servidor de correo no te lista los correos de esa forma.

Saludos.
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 09:30.