Cuando recuperamos mensajes de un servidor de correo tendremos dos partes, por un lado obtendremos un resumen con el tema de mensaje e información de la persona que lo envía y en un segundo paso tendremos el contenido del mensaje. En este ejemplo vamos a obtener cuerpo de un mensaje con PHP.
Para ello lo primero que haremos será conectarnos vía imap al servidor de correo mediante la función imap_open()
.
A la función imap_open()
le pasamos el nombre del servidor, el usuario y la contraseña del mismo para poder conectarse.
$hostname = '{mail.correo.com/notls}INBOX';
$username = '[email protected]';
$password = 'password';
$inbox = imap_open($hostname,$username,$password) or die('Ha fallado la conexión: ' . imap_last_error());
Una vez que nos hemos conectado al servidor de correo deberemos de recuperar los emails de uno de los buzones, en este caso vamos a recuperar todos los emails del buzón principal utilizando la función imap_search()
.
$emails = imap_search($inbox,'ALL');
En la variable $emails
tendremos todos los emails del buzón principal. Ahora vamos a obtener el cuerpo de uno de los mensajes, en concreto, y a modo de ejemplo lo haremos del primer mensaje.
La función que nos ayuda a obtener cuerpo de un mensaje con PHP es imap_fetchbody()
. Esta función recibe cuatro parámetros:
imap_fetchbody($stream_correos, $numero_mensaje, $seccion, $opciones);
El $stream_correos
son todos los emails obtenidos mediante imap_search()
, $numero_mensaje
es el número de mensaje dentro de la lista, el primer número será el 1.
Con respecto a $seccion
lo que vamos a poder recoger es o bien la cabecera, cuyo valor sería 0, o bien lo que sería el cuerpo del mensaje cuyo valor sería 1.
De esta manera el código que nos recuperaría el cuerpo del mensaje del primero de los mensajes sería:
$cuerpo = imap_fetchbody($inbox,1,1);
El contenido del cuerpo del mensaje vendrá codificado, así que deberemos de utilizar la función imap_qprint()
para volcar el contenido.
echo imap_qprint($cuerpo);
Ya solo nos quedará cerrar la conexión imap al servidor para terminar nuestro ejemplo que nos permite obtener cuerpo de un mensaje con PHP.
imap_close($inbox);