Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/09/2009, 11:54
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 18 años
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!