Estoy creando una clase para gestionar los emails relacionados con mi blog desde el propio blog.
Para poder presentar los mensajes en los buzones necesito recoger toda la información posible de sus cabeceras. Esto se consigue con imap_headerinfo o con imap_header (imap_headers devuelve muy poca información de cabecera).
imap_headerinfo o su alias imap_header están pensadas para recoger la cabecera de un mensaje referenciado por su número en los parámetros de dichas funciones.
Ante esta limitación, decidí que quería lograr dos cosas con el método de extraer todas las cabeceras de todos los mensajes:
1) código optimizado a ser posible en una sola línea, clara y concisa.
2) a ser posible evitar foreach o cualquier otro loop o condicional.
así que concluí en que debía hacerlo así
Código PHP:
Ver original return $this->all_headers= array_map("\imap_headerinfo", $this->imap_stream, self::search("ALL")); }
La idea es sencilla y aparentemente me pareció posible.
self::search() es otro método que utiliza imap_search() para recoger todos los números de los correos de un buzón. El parámetro que le paso "ALL" indica que quiero que recoja todos los los correos en la bandeja; devuelve un array con la siguiente estructura
Cita: array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
Es un array asociativo y bien sencillo.
El problema viene que cuando solicito todas las cabeceras a través de este método (getAllHeaders) me devuelve el siguiente error en array_map()
Cita: Warning: array_map(): Argument #2 should be an array in C:\xampp\htdocs\xampp\web\pruebas\imap.php on line 114
La línea 114 es la misma del return del método getAllHeaders.
¿Por qué me devuelve ese error si realmente le estoy pasando un array asociativo tal y
como especifica la documentación de PHP?