Descargar emails con POP3 y PHP

22/Mar/2011 PHP , , , , , , , , , 7 Comentarios

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:

  1. 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:

  1. $hostname = '{mail.lineadecodigo.com/notls}';
  2. $username = 'usuario@lineadecodigo.com';
  3. $password = 'mipassword';

El que tiene más complicación es el nombre del mailbox. La estructura del mailbox suele ser la siguiente:

  1. {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:

  1. $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.

  1. $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.

  1. 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.

  1. foreach($emails as $email_number) {
  2. $overview = imap_fetch_overview($inbox,$email_number,0);
  3. $salida.= 'Tema: '.$overview[0]->subject;
  4. $salida.= 'De: '.$overview[0]->from;
  5. }

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.

  1. imap_close($inbox);

Ya tendremos listo nuestro programa para descargar emails con POP3 y PHP.

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

7 comentarios en “Descargar emails con POP3 y PHP”

Víctor Cuervo

Nelson

Gracias! sera que se puede acceder al buzon de salida del correo? y tambien filtrar por asunto de correos?

Víctor Cuervo

Iván Argulo

Hay muchas funciones para conectar con servidores imap y pop3, y tu código me ha servido de trampolín para todas ellas.

Gracias y un saludo.

Víctor Cuervo

Javier - Diseño web

Muchas gracias por el articulo. Estaba buscando algo asi pero no encontraba. Estoy haciendo una aplicacion en la que necesitan ver sus emails si ir al webmail y me va a ser muy util.

Gracias!!

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*