Java - Cliente IMAP

 
Vista:
sin imagen de perfil

Cliente IMAP

Publicado por Eric (2 intervenciones) el 16/01/2024 22:02:36
Buenas tengo un cliente IMAP al que le tengo que pasar varias opciones como crear/borrar carpetas y he hecho un menú pero necesito que me vuelva a poder seleccionar otra opcion es decir que vuelva a salir el menú:

package edu.ucam;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class Aplicacion {
public static String leerRespuesta(BufferedReader in) throws IOException {
String linea = "";
linea = in.readLine();

System.out.println("Servidor: " + linea);

while ((linea = in.readLine()).startsWith("*")) {
System.out.println("Servidor: " + linea);
}

System.out.println(linea);
return linea;
}

public static void main(String[] args) {
// El host y el puerto del servidor IMAP de Gmail.
String host = "imap.gmail.com";
int port = 993;

try {
String correo = "*************";
String clave = "************";

// Obteniendo el SSLSocketFactory
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
// Creando un SSLSocket
SSLSocket sslSocket = (SSLSocket) factory.createSocket(host, port);

try (PrintWriter out = new PrintWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
Scanner scanner1 = new Scanner(System.in)) {

System.out.println("Bienvenida: " + in.readLine());

out.println("a1 LOGIN " + correo + " " + clave);
out.flush();

leerRespuesta(in);

boolean salir = false;

do {
System.out.println("Seleccione una opción:");
System.out.println("a. Leer el contenido de un mensaje concreto");
System.out.println("b. Eliminar mensajes");
System.out.println("c. Crear carpeta");
System.out.println("d. Eliminar carpeta");
System.out.println("e. Listar correos de una carpeta seleccionada");
System.out.println("f. Salir");

System.out.print("Seleccione una opción: ");
String opcion = scanner1.nextLine();

switch (opcion) {
case "a":
System.out.println("Opción a seleccionada");
System.out.println("Ingrese el número de secuencia del mensaje:");
String numeroSecuencia = scanner1.nextLine();
out.println("a3 FETCH " + numeroSecuencia + " RFC822");
out.flush();
leerRespuesta(in);
break;
case "b":
System.out.println("Opción b seleccionada");
System.out.println("Ingrese el número de secuencia del mensaje a eliminar:");
String numeroEliminar = scanner1.nextLine();
out.println("a2 STORE " + numeroEliminar + " +FLAGS (\\Deleted)");
out.flush();
leerRespuesta(in);

out.println("a3 EXPUNGE");
out.flush();
leerRespuesta(in);
break;
case "c":
System.out.println("Opción c seleccionada");
System.out.println("Ingrese el nombre de la nueva carpeta:");
String nuevaCarpeta = scanner1.nextLine();
out.println("a4 CREATE " + nuevaCarpeta);
out.flush();
leerRespuesta(in);
break;
case "d":
System.out.println("Opción d seleccionada");
System.out.println("Ingrese el nombre de la carpeta a eliminar:");
String carpetaEliminar = scanner1.nextLine();
out.println("a5 DELETE " + carpetaEliminar);
out.flush();
leerRespuesta(in);
break;
case "e":
System.out.println("Opción e seleccionada");
System.out.println("Ingrese el nombre de la carpeta a seleccionar:");
String carpetaSeleccionar = scanner1.nextLine();
out.println("a6 SELECT " + carpetaSeleccionar);
out.flush();
leerRespuesta(in);

out.println("a7 SEARCH ALL");
out.flush();
leerRespuesta(in);
break;
case "f":
salir = true;
break;
default:
System.out.println("Opción inválida");
break;
}
System.out.print("¿Desea seleccionar otra opción? (s/n): ");
scanner1.nextLine(); // Limpiar el búfer
String continuar = scanner1.nextLine();

if (!continuar.equalsIgnoreCase("s")) {
salir = true;
} else {
salir = false; // Reiniciar la variable sali
}
System.out.println();
} while (!salir);

System.out.println("Programa finalizado");
}
} catch (Exception e) {
System.out.println("Error al acceder al correo: " + e.getMessage());
e.printStackTrace();
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cliente IMAP

Publicado por Billy Joel (876 intervenciones) el 18/01/2024 14:04:59
Creo que te enredaste al final, lo cambié solo un poco al final.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package edu.ucam;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
 
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
 
public class Aplicacion {
 
    public static String leerRespuesta(BufferedReader in) throws IOException {
        String linea;
        linea = in.readLine();
 
        System.out.println("Servidor: " + linea);
 
        while ((linea = in.readLine()).startsWith("*")) {
            System.out.println("Servidor: " + linea);
        }
 
        System.out.println(linea);
        return linea;
    }
 
    public static void main(String[] args) {
        // El host y el puerto del servidor IMAP de Gmail.
        String host = "imap.gmail.com";
        int port = 993;
 
        try {
            String correo = "*************";
            String clave = "************";
 
            // Obteniendo el SSLSocketFactory
            SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            // Creando un SSLSocket
            SSLSocket sslSocket = (SSLSocket) factory.createSocket(host, port);
 
            try ( PrintWriter out = new PrintWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
                    BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
                    Scanner scanner1 = new Scanner(System.in)) {
 
                System.out.println("Bienvenida: " + in.readLine());
 
                out.println("a1 LOGIN " + correo + " " + clave);
                out.flush();
 
                leerRespuesta(in);
 
                boolean salir = false;
 
                do {
                    System.out.print("Seleccione una opción:"
                            + "\na. Leer el contenido de un mensaje concreto"
                            + "\nb. Eliminar mensajes"
                            + "\nc. Crear carpeta"
                            + "\nd. Eliminar carpeta"
                            + "\ne. Listar correos de una carpeta seleccionada"
                            + "\nf. Salir"
                            + "\nSeleccione una opción: ");
                    String opcion = scanner1.nextLine();
 
                    switch (opcion) {
                        case "a":
                            System.out.print("Opción a seleccionada"
                                    + "\nIngrese el número de secuencia del mensaje:");
                            String numeroSecuencia = scanner1.nextLine();
                            out.println("a3 FETCH " + numeroSecuencia + " RFC822");
                            out.flush();
                            leerRespuesta(in);
                            break;
                        case "b":
                            System.out.print("Opción b seleccionada"
                                    + "\nIngrese el número de secuencia del mensaje a eliminar:");
                            String numeroEliminar = scanner1.nextLine();
                            out.println("a2 STORE " + numeroEliminar + " +FLAGS (\\Deleted)");
                            out.flush();
                            leerRespuesta(in);
 
                            out.println("a3 EXPUNGE");
                            out.flush();
                            leerRespuesta(in);
                            break;
                        case "c":
                            System.out.print("Opción c seleccionada"
                                    + "\nIngrese el nombre de la nueva carpeta:");
                            String nuevaCarpeta = scanner1.nextLine();
                            out.println("a4 CREATE " + nuevaCarpeta);
                            out.flush();
                            leerRespuesta(in);
                            break;
                        case "d":
                            System.out.print("Opción d seleccionada"
                                    + "\nIngrese el nombre de la carpeta a eliminar:");
                            String carpetaEliminar = scanner1.nextLine();
                            out.println("a5 DELETE " + carpetaEliminar);
                            out.flush();
                            leerRespuesta(in);
                            break;
                        case "e":
                            System.out.print("Opción e seleccionada"
                                    + "\nIngrese el nombre de la carpeta a seleccionar:");
                            String carpetaSeleccionar = scanner1.nextLine();
                            out.println("a6 SELECT " + carpetaSeleccionar);
                            out.flush();
                            leerRespuesta(in);
 
                            out.println("a7 SEARCH ALL");
                            out.flush();
                            leerRespuesta(in);
                            break;
                        case "f":
                            salir = true;
                            break;
                        default:
                            System.out.println("Opción inválida");
                            break;
                    }
 
                    if (!salir) {
                        System.out.print("¿Desea seleccionar otra opción? (s/n): ");
                        scanner1.nextLine(); // Limpiar el búfer
                        String continuar = scanner1.nextLine();
                        salir = continuar.equalsIgnoreCase("s");
                    }
 
                    System.out.println();
                } while (!salir);
 
                System.out.println("Programa finalizado");
            }
        } catch (IOException e) {
            System.out.println("Error al acceder al correo: " + e.getMessage());
            e.printStackTrace(System.out);
        }
    }
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cliente IMAP

Publicado por Eric (2 intervenciones) el 20/01/2024 19:39:05
Buenas muchas gracias Billy Joel, igualmente he intentado ejecutar el código y sigue igual, el problema es el siguiente: Seleccione una opción:
a. Leer el contenido de un mensaje concreto
b. Eliminar mensajes
c. Crear carpeta
d. Eliminar carpeta
e. Listar correos de una carpeta seleccionada
f. Salir
Seleccione una opción: c
Opción c seleccionada
Ingrese el nombre de la nueva carpeta:provanx
Servidor: a4 OK Success

Ha creado la carpeta pero no vuelve a mostrar el menú tras ello , no se porque...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar