Como Obtener las cabeceras de los correos recibidos

Obtenemos las cabeceras de correo a través de un cliente mediante la utilización de sockets en java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
 
public class GmailImapExample {
 
    public static void main(String[] args) {
        final String username = "correo@gmail.com"; // Reemplaza con tu dirección de Gmail
        final String password = "Contraseña"; // Reemplaza con tu contraseña de Gmail
        String command = "";
 
        try (SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket("imap.gmail.com", 993);
 
 
        	BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter writer = new PrintWriter(socket.getOutputStream(), true)) {
 
            // Imprime información del socket para verificar la conexión SSL
            System.out.println("Socket connected: " + socket.isConnected());
            System.out.println("Socket cipher suite: " + socket.getSession().getCipherSuite());
 
            // Lee la respuesta inicial del servidor
            String response = reader.readLine();
            System.out.println(response);
 
            // Envía el comando de inicio de sesión
            writer.println("a001 LOGIN " + username + " " + password);
 
            response = reader.readLine();
            System.out.println(response);
 
            // Envía el comando para listar los mensajes en el INBOX
            writer.println("a002 SELECT INBOX");
 
            response = reader.readLine();
            System.out.println(response);
 
 
 
            // Obtener los IDs de los mensajes------------------------------------------------------
            command = "a003 FETCH 1:* (BODY[HEADER.FIELDS (FROM SUBJECT DATE)])\r\n";
            writer.print(command);
            writer.flush();
 
            response = reader.readLine();
            while (response != null) {
                System.out.println(response);
                response = reader.readLine();
            }
 
            //Cerramos la conexión
            command = "a004 LOGOUT\r\n";
            writer.print(command);
            writer.flush();
 
            response = reader.readLine();
            System.out.println(response);
 
 
 
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}