Suele ser muy común en una web el envío de correos electrónicos mediante la función mail de PHP, ahora bien puede ser que a veces necesitemos leer correos desde PHP, ya sea para crear una aplicación de webmail, o para mostrar al usuario sus correos recibidos, o cualquier otra funcionalidad que se nos ocurra.
Para lograr esto, tenemos dos formas de hacerlo:
1) Implementar el protocolo directamente a través de sockets.
Puede que sea la forma más laboriosa pero en algunos casos, puede ser útil. Como hemos dicho se trata de abrir un socket al servidor de correo y comunicarnos con él utilizando el protocolo requerido, donde los más comunes son POP3 e IMAP.
Por ejemplo, para crear el socket haríamos:
$server = "ip del servidor"; $user = "usuario de correo"; $pass = "contraseña del correo"; $connection = fsockopen($server, 110, $errno, $errstr, 30);A destacar que aquí abrimos la conexión al puerto 110 (correspondiente a POP3).
Para logearnos en el servidor de correo, bastaría con hacer lo siguiente:
fputs($connection, "user $usern"); echo fgets($connection)."Como podemos ver se trata de envíar un mensaje y esperar una respuesta.
"; fputs($connection, "pass $passn"); echo fgets($connection)."
";
Los mensajes que envíamos y el orden en que se envían los marca el protocolo a utilizar en este caso POP3, así que por ejemplo si queremos recibir el correo número 2 debemos enviar lo siguiente:
fputs($connection, "RETR 2n"); $total = 0; $bloque = 1000; while ($total < $tamano) { echo fread($connection, $bloque); $total = $total + $bloque; }Se envía el mensaje RETR 2, con lo cual el servidor de correo nos manda el mensaje número 2, y procedemos a leerlo. El tamaño del mensaje a leer, lo obtenemos mandadole previamente el mensaje LIST 2.
2) La forma más sencilla y recomendada, consiste en utilizar las funciones IMAP que nos proporciona PHP. Estas permiten conectar con POP3, IMAP y NNTP.
En este caso si queremos abrir una conexión POP3 como antes, tendremos que utilizar la función imap_open:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");
Para obtener el numero de mensajes se utiliza imap_check, y para leer la cabecera de un mensaje por si queremos ver quién lo ha enviado, se utiliza la función:
$cabecera = imap_headerinfo($mbox, numero_mensaje) $from = $cabecera->from; $subject = $cabecera->subject;Para leer ya el mensaje en sí, utilizamos la función imap_fetchstructure, pasandole como parametros la conexión abierta ($mbox), y el número del mensaje.
De esta forma obtenemos todas las partes que contiene el mensaje de correo electrónico, pudiendo ser estas texto plano, html...
Otras funciones útiles son imap_delete, que nos permite eliminar un mensaje, e imap_expunge que hace efectivos los cambios, por ejemplo borra finalmente los mensajes marcados con delete.
A destacar que las funciones IMAP al conectar a una cuenta de POP3 no disponen de toda su funcionalidad, es decir no podemos marcar mensajes como leídos, ni manejar carpetas, ...
Comentarios