import java.io.*;
import org.apache.commons.net.pop3.*;
//import org.apache.commons.net.PrintCommandListener;

class POP3Mail{
    public static void main(String[] args){
        
        // Parametros del buzon
        String server = "pop.gmail.com";
        String username = "XXX@gmail.com";
        String password = "YYY";

        // Creando un cliente POP3 Seguro SSL
        POP3Client pop3 = new POP3SClient(true);;
        System.out.println("1.- Conectando");
        pop3.setDefaultTimeout(60000);
        //pop3.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));

        try{
            // Conectando
            pop3.connect(server);
            if (!pop3.login(username, password)){
                System.out.println("NO PUEDO CONECTARME");
                pop3.disconnect();
                System.exit(1);
            }

            // Pido al buzon los mensajes
            POP3MessageInfo[] mensajes = pop3.listMessages();
            if (mensajes == null){
                System.out.println("NO PUEDO RECUPERAR LOS MENSAJES DEL BUZON");
                pop3.disconnect();
                System.exit(2);
            }else if (mensajes.length == 0){
                System.out.println("NO HAY MENSAJES ;-)");
                pop3.logout();
                pop3.disconnect();
                System.exit(3);
            }

            // Muestros los mensajes uno a uno.
            for(int i=0;i<mensajes.length;i++){
                POP3MessageInfo mensaje=mensajes[i];
                BufferedReader br = (BufferedReader) pop3.retrieveMessageTop(mensaje.number, 0);

                if (br == null) {
                    System.out.println("NO PUEDO RECUPERAR LA CABECERA DEL MENSAJE");
                    pop3.disconnect();
                    System.exit(4);
                }
                imprimeMensaje(br, mensaje.number);
            }

            // Hasta luego, Lucas
            pop3.logout();
            pop3.disconnect();
        }catch (IOException e){
            System.out.println("ERROR GENERAL");
            e.printStackTrace();
        }
    }
    
    static void imprimeMensaje(BufferedReader reader, int id) throws IOException  {
        String remitente = "";
        String asunto = "";
        String linea;
        while ((linea = reader.readLine()) != null){
            // Paso la linea a minusculas por si combina mayusculas y minusculas
            String minusculas = linea.toLowerCase();
            // Solo voy a imprimir el remitente y el asunto
            if (minusculas.startsWith("from: ")) remitente = linea.substring(6).trim();
            if (minusculas.startsWith("subject: ")) asunto = linea.substring(9).trim();
        }
        System.out.println(id + " Origen: " + remitente + "  Asunto: " + asunto);
    }
    
}

