Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Descargar adjunto de imap con PHP

Estas en el tema de Descargar adjunto de imap con PHP en el foro de PHP en Foros del Web. Me mandan unos correos y me conecto por imap y obtengo la información de los correos, el problema es como descargar los ficheros adjuntos. Haciendo ...
  #1 (permalink)  
Antiguo 17/04/2013, 08:25
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 6 meses
Puntos: 58
Descargar adjunto de imap con PHP

Me mandan unos correos y me conecto por imap y obtengo la información de los correos, el problema es como descargar los ficheros adjuntos.

Haciendo un imap_fetchbody entiendo que tengo ahí todas las propiedades. Me duelve un array y uno de los campos es:

Content-Type: X-MS-Has-Attach:

que supongo que es lo que me indica si hay adjuntos. Pero como los descargo?


Bueno ya lo he conseguido entre cosas mías y copiadas de por ahí, pongo el código de mi función "buscar" (solo quiero los emails que tengan cierto adjunto)
por si le sirve a alguien. Fácil de adaptar.

Código PHP:
Ver original
  1. public function buscar($asunto, $ficheroBusqueda) {
  2.         $emails = imap_search ( $this->conexion, "ALL" );
  3.         if ($emails) {
  4.             /* Poner los emails más nuevos arriba */
  5.             rsort ( $emails );
  6.            
  7.             foreach ( $emails as $email ) {
  8.                 $propiedades = imap_fetch_overview ( $this->conexion, $email );
  9.                 if (strpos ( $propiedades [0]->subject, $asunto )) {
  10.                    
  11.                     $structure = imap_fetchstructure ( $this->conexion, $email );
  12.                    
  13.                     // ompruebo si hay ficheros adjuntos
  14.                     $attachments = array ();
  15.                     if (isset ( $structure->parts ) && count ( $structure->parts )) {
  16.                         for($i = 0; $i < count ( $structure->parts ); $i ++) {
  17.                             $attachments [$i] = array (
  18.                                     'is_attachment' => false,
  19.                                     'filename' => '',
  20.                                     'name' => '',
  21.                                     'attachment' => ''
  22.                             );
  23.                             if ($structure->parts [$i]->ifdparameters) {
  24.                                 foreach ( $structure->parts [$i]->dparameters as $object ) {
  25.                                     if (strtolower ( $object->attribute ) == 'filename') {
  26.                                         $attachments [$i] ['is_attachment'] = true;
  27.                                         $attachments [$i] ['filename'] = $object->value;
  28.                                     }
  29.                                 }
  30.                             }
  31.                             if ($structure->parts [$i]->ifparameters) {
  32.                                 foreach ( $structure->parts [$i]->parameters as $object ) {
  33.                                     if (strtolower ( $object->attribute ) == 'name') {
  34.                                         $attachments [$i] ['is_attachment'] = true;
  35.                                         $attachments [$i] ['name'] = $object->value;
  36.                                     }
  37.                                 }
  38.                             }
  39.                             if ($attachments [$i] ['is_attachment']) {
  40.                                 $attachments [$i] ['attachment'] = imap_fetchbody ( $this->conexion, $email, $i + 1 );
  41.                                 if ($structure->parts [$i]->encoding == 3) { // 3 = BASE64
  42.                                     $attachments [$i] ['attachment'] = base64_decode ( $attachments [$i] ['attachment'] );
  43.                                 } elseif ($structure->parts [$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
  44.                                     $attachments [$i] ['attachment'] = quoted_printable_decode ( $attachments [$i] ['attachment'] );
  45.                                 }
  46.                             }
  47.                         }
  48.                     }
  49.                    
  50.                     foreach ( $attachments as $adjunto ) {
  51.                         if ($adjunto ['is_attachment']) {
  52.                             $nombreFichero = $adjunto ['filename'];
  53.                             $adjunto = $adjunto ['attachment'];
  54.                             echo "Comparando $ficheroBusqueda con $nombreFichero<br />";
  55.                             if ($ficheroBusqueda == $nombreFichero) {
  56.                                 if ($adjunto) {
  57.                                     $gestor = fopen ( $nombreFichero, 'w' );
  58.                                     fwrite ( $gestor, $adjunto );
  59.                                     fclose ( $gestor );
  60.                                     return $nombreFichero;
  61.                                 }
  62.                             } // Fin de nombre fichero
  63.                         } // Fin de es adjunto
  64.                     } // Fin de foreach adjunto                
  65.                 } // Fin de si coincide el asunto
  66.             } // Fin de foreach email
  67.         } // Fin de si hay emails
  68.         return false; // Sólo sino encontró ficheros
  69.     } // Fin de buscar correos

Última edición por alyciashape; 17/04/2013 a las 09:50

Etiquetas: imap
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:29.