Descargar emails con POP3 y PHP es una operación muy sencilla y que solo requerirá el conocimiento de dos o tres funciones. De esta forma podremos crear una página PHP que liste nuestros emails descargandolos con POP3.
Lo primero es conocer la función imap_open. Esta función es la que nos permitirá conectarnos con el servidor de email vía POP3.
La función imap_open a parte de POP3 también permite descargas de email mediante IMAP y de news mediante NNTP.
La función imap_open tiene la siguiente estructura:
imap_open($mailbox, $username, $password [, $options, $retries, $params]
De los tres parámetros obligatorios de imap_open tenemos:
- mailbox, buzón que contiene el email que nos queremos descargar con POP3.
- username, Nombre del usuario que se conecta al buzón. Suele ser una dirección de email.
- password, la contraseña del usuario.
Así, que lo primero será declarar los valores de estos parámetros en variables:
$hostname = '{mail.lineadecodigo.com/notls}';
$username = '[email protected]';
$password = 'mipassword';
El que tiene más complicación es el nombre del mailbox. La estructura del mailbox suele ser la siguiente:
{servidor:puerto/flags}carpeta
En nuestro caso mail.lineadecodigo.com es el nombre del servidor. El puerto no lo indicamos, aunque en el caso de acceder vía POP3 utilizaremos el 110. El parámetro /notls son las opciones de conexión. En este caso al utilizar /notls indicamos al servidor que no inicie una sesión segura (por simplicidad). Tampoco hemos indicado la carpeta de la que queremos recuperar los emails mediante POP3. Al no ponerla se toma INBOX como por defecto.
Pasemos a conectarnos con imap_open:
$inbox = imap_open($hostname,$username,$password) or die('Ha fallado la conexión: ' . imap_last_error());
La sentencia or die permite gestionar el caso de fallo en la conexión.
Una vez que tenemos la conexión pasamos a listar los emails. Para ello tenemos varias funciones, aunque nosotros nos centraremos en imap_search() esta función busca los emails bajo un determinado criterio. Nosotros utilizaremos el criterio «ALL», es decir, todos los emails.
$emails = imap_search($inbox,'ALL');
Ahora tendremos un array en $emails con todos los email de nuestro inbox. Es por ello que los recorreremos mediante un bucle for-each.
foreach($emails as $email_number) {...}
La estructura del email tiene varias partes, pero nosotros nos centraremos en la cabecera. En la cabecera es dónde va la información de la persona que nos lo envió, el tema del email,… Para recuperar la cabecera de un email utilizamos la función imap_fecth_overview. A esta función le pasamos el buzón y el email del que queremos recuperar la cabecera.
foreach($emails as $email_number) {
$overview = imap_fetch_overview($inbox,$email_number,0);
$salida.= 'Tema: '.$overview[0]->subject;
$salida.= 'De: '.$overview[0]->from;
}
El resultado de ejecutar imap_fecth_overview es un array con un montón de propiedades. De estas propiedades nos quedamos con subject y from para mostrarlas por pantalla.
Ahora que hemos listado las cabeceras de todos los mensajes de nuestro buzón lo que haremos será el cerrar la conexión de nuestro buzón de emails mediante la función imap_close.
imap_close($inbox);
Ya tendremos listo nuestro programa para descargar emails con POP3 y PHP.