Conectándose al servidor IMAP
El ImapClient la clase permite a las aplicaciones gestionar buzones IMAP usando el protocolo IMAP. El ImapClient la clase se usa para conectar a servidores de correo IMAP y gestionar correos en las carpetas de email IMAP. Para conectar a un servidor IMAP
- Cree una instancia de la ImapClient clase.
- Especificar el nombre de host, nombre de usuario y contraseña en el constructor ImapClient.
Una vez que ImapClient se inicia la instancia, la siguiente llamada a cualquier operación usando esta instancia conectará al servidor. El siguiente fragmento de código muestra cómo conectarse a un servidor IMAP usando los pasos anteriores.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an imapclient with host, user and password
ImapClient client = new ImapClient("localhost", "user", "password");
Conectándose con servidor IMAP con SSL habilitado
Conectándose con el servidor IMAP describe cómo conectarse a un servidor IMAP en cuatro simples pasos:
- Cree una instancia de la ImapClient clase.
- Especificar el nombre de host, nombre de usuario y contraseña.
- Especificar el puerto.
- Especifique el Opciones de seguridad.
El proceso para conectarse a un servidor IMAP con SSL habilitado es similar pero requiere que configures algunas propiedades más:
- Establecer Opciones de seguridad a SSLImplicit.
El siguiente fragmento de código muestra cómo
- Establecer un nombre de usuario, contraseña y puerto.
- Establecer opción de seguridad.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the ImapClient class
ImapClient client = new ImapClient("imap.domain.com", 993, "user@domain.com", "pwd");
// Set the security mode to implicit
client.setSecurityOptions(SecurityOptions.SSLImplicit);
Conectando al servidor mediante proxy
Los servidores proxy se usan comúnmente para comunicarse con el exterior. En tales casos, los clientes de correo no pueden comunicarse por Internet sin especificar la dirección del proxy. Aspose.Email ofrece soporte para las versiones 4, 4a y 5 del protocolo proxy SOCKS. Este artículo proporciona un ejemplo funcional de acceso al buzón usando un servidor proxy de correo. Para acceder al buzón a través de un servidor proxy:
- Inicializar SocksProxy con la información requerida, es decir, dirección del proxy, puerto y versión SOCKS.
- Inicializar ImapClient con la dirección del host, nombre de usuario, contraseña y cualquier otra configuración.
- Establecer el cliente SocksProxy propiedad al SocksProxy objeto creado arriba.
El siguiente fragmento de código muestra cómo recuperar el buzón a través de un servidor proxy.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP and set SecurityOptions
ImapClient client = new ImapClient("imap.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);
// Set the proxy
client.setProxy(proxy);
try {
client.selectFolder("Inbox");
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
Conectándose al servidor vía proxy HTTP
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
final ImapClient client = new ImapClient("imap.domain.com", "username", "password");
try {
client.setProxy(proxy);
client.selectFolder("Inbox");
} finally {
if (client != null)
client.dispose();
}
Personalizar mecanismo de autenticación
Recuperar la lista de mecanismos de autenticación compatibles con el servidor IMAP usando el getSupportedAuthentication método del ImapClient clase. Este método permite al cliente determinar qué métodos de autenticación están disponibles para establecer una conexión segura con el servidor. Luego, usando el setAllowedAuthentication método que obtiene (o establece) la enumeración de los tipos de autenticación permitidos por el usuario, elija el mecanismo de autenticación más apropiado para la comunicación cliente-servidor. Esto le permite establecer el método de autenticación para el cliente de correo explícitamente.
El siguiente ejemplo de código muestra cómo personalizar la autenticación del cliente de correo electrónico:
imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.Plain);
Conectándose al servidor en modo de solo lectura
El ImapClient clase proporciona un ReadOnly propiedad que, cuando se establece en true, indica que no se deben hacer cambios en el estado permanente del buzón. El siguiente ejemplo de código demuestra el uso de ImapClient.ReadOnly propiedad. Obtiene el recuento de mensajes no leídos, luego recupera un mensaje y vuelve a obtener el recuento de mensajes no leídos en modo de solo lectura. El recuento de los mensajes no leídos permanece igual, lo que indica que el estado permanente del buzón no se modificó.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);
ImapQueryBuilder imapQueryBuilder = new ImapQueryBuilder();
imapQueryBuilder.hasNoFlags(ImapMessageFlags.isRead()); /* get unread messages. */
MailQuery query = imapQueryBuilder.getQuery();
imapClient.setReadOnly(true);
imapClient.selectFolder("Inbox");
ImapMessageInfoCollection messageInfoCol = imapClient.listMessages(query);
System.out.println("Initial Unread Count: " + messageInfoCol.size());
if (messageInfoCol.size() > 0) {
imapClient.fetchMessage(messageInfoCol.get_Item(0).getSequenceNumber());
messageInfoCol = imapClient.listMessages(query);
// This count will be equal to the initial count
System.out.println("Updated Unread Count: " + messageInfoCol.size());
} else {
System.out.println("No unread messages found");
}
Uso de autenticación CRAM-M5 para conectar a un servidor
Para garantizar una autenticación y comunicación seguras con el servidor IMAP, puedes especificar y aplicar el uso de CRAM-MD5 como método de autenticación permitido para el cliente IMAP. El siguiente fragmento de código muestra cómo configurar el tipo de autenticación permitido para el ImapClient:
imapClient.setAllowedAuthentication(ImapKnownAuthenticationType.CramMD5);
Validar credenciales del servidor de correo sin enviar correo electrónico
A veces es necesario verificar credenciales sin enviar un correo electrónico. Aspose.Email proporciona el validateCredentials() método para realizar esta operación. Si la validación es exitosa, se ejecuta el código dentro de la sentencia if, típicamente usado para realizar acciones adicionales o recuperar datos del servidor IMAP. El siguiente fragmento de código demuestra la validación de credenciales sin enviar un correo electrónico:
try (ImapClient imapClient = new ImapClient(
server.ImapUrl, server.ImapPort, "username", "password", SecurityOptions.Auto)) {
imapClient.setTimeout(4000);
if (imapClient.validateCredentials()) {
// to do something
}
}
Cómo establecer tiempo de espera para operaciones de correo
Cada operación de correo lleva tiempo dependiendo de muchos factores (retardos de red, tamaño de datos, rendimiento del servidor, etc.). Puede establecer un tiempo de espera para todas las operaciones de correo. El ejemplo de código a continuación le muestra cómo hacerlo usando el Tiempo de espera propiedad. Nota: no debe establecer valores grandes para evitar largas esperas en su aplicación.
try (ImapClient imapClient = new ImapClient("host", 993, "username", "password", SecurityOptions.SSLImplicit))
{
imapClient.setTimeout(60000); // 60 seconds
// some code...
}
Cómo restringir el tiempo de saludo
El cliente IMAP puede usar el modo automático para establecer una conexión. En este modo, el cliente IMAP recorre todos los parámetros de conexión posibles hasta que la conexión se establece. Un servidor IMAP, en caso de una conexión correcta, envía una cadena de saludo al cliente. Los servidores pueden usar iniciación de conexión SSL/TLS implícita o explícita (START TLS). Si el modo de conexión no coincide (por ejemplo, el servidor espera una conexión SSL implícita pero el cliente intenta establecer una conexión no segura o SSL explícita), el servidor no enviará la cadena de saludo y el usuario esperará mucho tiempo hasta que el tiempo de espera alcance la cadena de saludo, y el cliente pasará a la siguiente opción de conexión. Para evitar este problema, se ha introducido GreetingTimeout. Esta propiedad permite establecer el tiempo de espera para la cadena de saludo y reducir el tiempo de establecimiento automático de la conexión.
ImapClient imapClient = new ImapClient();
imapClient.setGreetingTimeout(4000);