Extracción de archivos adjuntos de PHP IMAP

Hola, tengo unas funciones de PHP IMAP que extraen los archivos adjuntos de un cuerpo específico de un correo electrónico, descubrí este artículo: http://www.linuxscope.net/articles/mailAttachmentsPHP.html pero muestra un error: Advertencia: imap_bodystruct ( ) [function.imap-bodystruct]: Número de mensaje incorrecto. No sé lo que me estoy perdiendo. Aquí está mi código

session_start(); include('settings.php'); include('vars.php'); $struct = imap_fetchstructure($mbox,$getmsgid, FT_UID); $contentParts = count($struct->parts); if ( $contentParts >= 2 ) { for ( $ii=2; $ii<=$contentParts; $ii++ ) { $att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii); echo $ii . '
'; } for ($k=0;$kparameters[0]->value == "us-ascii" || $att[$k]->parameters[0]->value == "US-ASCII") { if ($att[$k]->parameters[1]->value != "") { $selectBoxDisplay[$k] = $att[$k]->parameters[1]->value; } }elseif ($att[$k]->parameters[0]->value != "iso-8859-1" && $att[$k]->parameters[0]->value != "ISO-8859-1") { $selectBoxDisplay[$k] = $att[$k]->parameters[0]->value; } } } if (sizeof($selectBoxDisplay) > 0) { echo ""; for ($j=0;$j<sizeof($selectBoxDisplay);$j++) { echo "\n". $selectBoxDisplay[$j] .""; } echo ""; }

el archivo settings.php contiene mi conexión $ mbox, funciona bien, el único problema aquí es imap_bodystruct ($ mbox, $ getmsgid, $ ii); ¿Hay algún problema con mi syntax allí?

Gracias,

Encontré la respuesta:

reemplace la línea de:

  $att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii); 

a :

  $att[$ii-2] = imap_bodystruct($mbox, imap_msgno($mbox, $getmsgid), $ii); 

esto muestra los archivos adjuntos, reemplace esta línea:

  if (sizeof($selectBoxDisplay) > 0) { echo ""; } 

a :

  foreach($selectBoxDisplay as $attachments => $attVal){ echo $attVal . '
'; }

Gracias,

Aquí está buscando el mensaje por UID.

 $struct = imap_fetchstructure($mbox,$getmsgid, FT_UID); 

Presumiblemente, cuando recuperes las partes del cuerpo, también tendrás que hacerlo por UID:

 $att[$ii-2] = imap_fetchbody ($mbox, $getmsgid, $ii, FT_UID) 

Esto debería buscar la parte del cuerpo por UID y número de parte.

Su llamada actual $att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii); , intentará recuperar el mensaje por número de secuencia de mensaje, que no es lo mismo que UID. Esta función (y no tengo claro qué es lo que hace) no parece tener una opción para recuperar por UID.

También tenga en cuenta que para los mensajes MIME profundamente complejos, las partes no son necesariamente secuenciales (como: 1, 2, 3); pueden tener subpartes: 1.1, 1.2, 2, 3. Esto es común si tiene un correo electrónico con HTML y texto plano, y tiene un archivo adjunto.