lunes, 28 de marzo de 2011

baja los correos con POP3 y PHP

Es bastante sencillo, lo primero es conocer la función imap_open. Nos permitirá conectarlos con el servidor de email vía POP3.

imap_open($mailbox, $username, $password [, $options, $retries, $params]

Solo tenemos 3 parámetros obligatorios que son los siguientes.

$hostname = '{mail.servidorcorreo.com/notls}';
$username = 'usuario@servidorcorreo.com';
$password = 'mipassword';

Siendo el mailBox el mas complicado ya que su estructura es la siguiente.
{servidor:puerto/flags}carpeta
En nuestro caso mail.servidorcorreo.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. Tampoco hemos indicado la carpeta de la que queremos recuperar los emails mediante POP3. Al no ponerla se toma INBOX como por defecto.
Ahora nos conectamos con el 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 usaremos imap_search() esta función busca los emails bajo un determinado criterio. Usaremos el criterio "ALL", es decir, todos los emails.
$emails = imap_search($inbox,'ALL');
Ahora 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);