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(); } } }