Ir al contenido principal

Extraer correos electrónicos Yahoo

Para descargar los correos electrónicos y registros de IMAP del servidor realizar el siguiente procedimiento.

1. Ingresar a la cuenta de correo de Yahoo provista por la parte requirente.

2. Obtener una clave para acceso vía IMAP

2.1. Acceder a las opciones de seguridad de Yahoo mail.
2.1.a. Buscar en google por los términos: yahoo app password
2.1.b. Opcionalmente buscar en google por los términos: yahoo mail generar contraseña de aplicacion
2.1.c. Opcionalmente acceder de manera directa al siguiente hipervínculo https://login.yahoo.com/account/security?.scrumb=nB9fOhkD3U9

2.2. Generar Contraseña de aplicación.
2.2.1. Dirigirse al menú Generar Contraseña de aplicación.
2.2.2. En el combo: Selecciona tu aplicación, marcar Otras aplicaciones.
2.2.3. En la misma casilla del combo, colocar el nombre de la aplicación, podría ser por ejemplo imapPeritaje.
2.2.4. La página web devuelve una contraseña de 16 caracteres v.gr. lowihkapjrqwsvla
2.2.5. Listo, ya tenemos nuestra contraseña de acceso.

3. Descargar los correos electrónicos a peritar.
3.1. Desarrollar un cliente de correo electrónico como el que se muestra más abajo.
3.2. Colocar los valores en $username y $password.
3.3. Colocar las fechas del primero y del último correo electrónico en el comando imap_search
3.4. Listo. El programa se encuentra en condiciones de ejecutarse:

D:\Imap> php YahoomailSaveEml.php

3.5. Dirigirse a la carpeta INBOX_$username y observar cómo se van agregando los correos electrónicos a la misma. El nombre de los correos electrónicos se corresponde con el msg_no proveniente de IMAP y la extensión eml.

3.6. Una vez descargados los correos repetir cambiando la carpeta Inbox por Sent.
3.7. Una vez descargados también los correos de la carpeta Sent (enviados), se puede proceder a comparar la cronología de las fechas de envío y/o recepción con la numeración de los mensajes msg_no revisando el archivo INBOX_$usernameTime.txt y SENT_$usernameTime.txt.
3.8. La manera en que se revisan los archivos .eml se explicará en otro post.


Archivo YahoomailSaveEml.php

<?php 
/*
ATENCIÓN. No utilizar la contraseña directa de yahoo. Se debe requerir al servidor una contraseña específica para esta aplicación.
1. Open Yahoo's secure login page. Go to https://login.yahoo.com/account/security?scrumb=qdwntcNeyBy and log in with your Yahoo email address and password.

O buscar en google con las palabras: yahoo app password

https://login.yahoo.com/account/security?.scrumb=za8qMKmDmdv


*/      
 
        $username = 'instalacion@yahoo.com.ar';
        $password = 'lowihkapjrqwsvla';
        $folder = 'Inbox'; // 'Sent'
        $usernameTime = $username.date('H-i-s', time());

$server = '{imap.mail.yahoo.com:993/imap/ssl/novalidate-cert}'.$folder;
echo $server;
$mailbox = imap_open($server, $username, $password) or die('Cannot connect to Mail Server: ' . imap_last_error());

try{
mkdir ("D:\\Imap\\INBOX_$username");
} catch(Exception $e) {echo "carpeta ya creada...";}

$search = imap_search($mailbox, 'SINCE "01-Jan-2020" BEFORE "01-Jan-2021" ', SE_UID); // 'TO "hotmail.com" SINCE "15-Nov-2015" BEFORE "11-Jan-2016" '
        $txt= "Msgno;InternalDateNo;From;To;Date;InternalDate;Subject;UID;size;answered<BR>"; 
        echo $txt; 
        $myfile = file_put_contents("INBOX_$usernameTime.txt", $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
foreach ($search as $msg_id)
{
    //Pega informações da mensagem
    $overview = imap_fetch_overview($mailbox, $msg_id, FT_UID);
                $val=$overview[0]; 
                $msg=$val->msgno; 
                //$from=$val->from; 
                //$to = $val->to;
                $date=$val->date; 
                $subj=iconv_mime_decode($val->subject); 
                $uid = $val->uid;
                $message_id = $val->message_id;
                $size    = $val->size   ;
                $answered  = $val->answered ;
                
                
                $header = imap_headerinfo ( $mailbox, $msg);
                $from = $header->from[0]->mailbox ."@". $header->from[0]->host;
                $to = $header->to[0]->mailbox ."@". $header->to[0]->host;
                $internalDate = date('Y-m-d H:i:s O',$header->udate);
                $internalDateNo = $header->udate;
                
                $txt = "$msg;$internalDateNo;$from;$to;$date;$internalDate;$subj;$uid;$size;$answered<BR>";
                echo $txt; 
                
                $myfile = file_put_contents("INBOX_$usernameTime.txt", $txt.PHP_EOL , FILE_APPEND | LOCK_EX);

                $headers = imap_fetchheader($mailbox, $msg, FT_PREFETCHTEXT);
                $body = imap_body($mailbox, $msg);
                file_put_contents("D:\\Imap\\INBOX_$username\\$msg.eml", $headers . $body);
}
     imap_close($mailbox); 
?>





Comentarios