Trabajando con mensajes del servidor

Obteniendo Información del Buzón

Podemos obtener información del buzón, como el número de mensajes y el tamaño del buzón, usando el getMailBoxSize y getMailBoxInfo métodos de la Pop3Client clase.

También es posible obtener el número de mensajes usando el MessageCount propiedad y el tamaño usando el OccupiedSize propiedad del Pop3MailBoxInfo clase. El siguiente código de ejemplo muestra cómo obtener información del buzón. Muestra cómo:

  1. Cree un Pop3Client.
  2. Conectar a un servidor POP3.
  3. Obtener el tamaño del buzón.
  4. Obtener información del buzón.
  5. Obtener el número de mensajes en el buzón.
  6. Obtener el tamaño ocupado.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

// Get the size of the mailbox, Get mailbox info, number of messages in the mailbox
long nSize = client.getMailboxSize();
System.out.println("Mailbox size is " + nSize + " bytes.");
Pop3MailboxInfo info = client.getMailboxInfo();
int nMessageCount = info.getMessageCount();
System.out.println("Number of messages in mailbox are " + nMessageCount);
long nOccupiedSize = info.getOccupiedSize();
System.out.println("Occupied size is " + nOccupiedSize);

Obteniendo el Conteo de Correos en el Buzón

El siguiente fragmento de código muestra cómo contar los mensajes de correo en un buzón.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Pop3Client client = new Pop3Client("pop3.server.com", "username", "password");
try {
    client.setSecurityOptions(SecurityOptions.Auto);
    int i = client.getMessageCount();
    System.out.println("Message count: " + i);
} catch (Pop3Exception ex) {
    System.out.println("Error:" + ex.toString());
}

Aspose.Email permite a los desarrolladores trabajar con correos electrónicos de muchas maneras diferentes. Por ejemplo, pueden recuperar la información del encabezado antes de decidir si descargar un correo. O pueden recuperar correos de un servidor y guardarlos sin analizarlos (más rápido) o después de analizarlos (más lento). Este artículo muestra cómo recuperar y convertir correos electrónicos.

Recuperando Información de los Encabezados de Correo

Los encabezados de correo electrónico pueden darnos información sobre un mensaje de correo que podemos usar para decidir si recuperar o no el mensaje completo. Normalmente, la información del encabezado contiene remitente, asunto, fecha de recepción, etc. (Los encabezados de correo se describen en detalle en Personalizando Encabezados de Correo Electrónico. Ese tema trata específicamente de enviar un correo electrónico con SMTP, pero la información del contenido del encabezado del correo sigue siendo válida para correos POP3). Los siguientes ejemplos muestran cómo recuperar encabezados de correo electrónico de un servidor POP3 mediante el número de secuencia del mensaje.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username. password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
    HeaderCollection headers = client.getMessageHeaders(1);
    for (int i = 0; i < headers.size(); i++) {
        // Display key and value in the header collection
        System.out.print(headers.getKey(i));
        System.out.print(" : ");
        System.out.println(headers.get(i));
    }
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Recuperando Mensajes de Correo Electrónico

El Pop3Client el componente de clase proporciona la capacidad de recuperar mensajes de correo electrónico del servidor POP3 y analizarlos en un MailMessage instancia con la ayuda de MailMessage componentes. El MailMessage clase contiene varias propiedades y métodos para manipular el contenido del correo electrónico. Mediante el uso de fetchMessage método del Pop3Client clase, puedes obtener una MailMessage instancia directamente del servidor POP3. El siguiente fragmento de código muestra cómo recuperar un mensaje de correo electrónico completo del servidor POP3.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);
try {
    int messageCount = client.getMessageCount();
    // Create an instance of the MailMessage class and Retrieve message
    MailMessage message;
    for (int i = 1; i <= messageCount; i++) {
        message = client.fetchMessage(i);
        System.out.println("From:" + message.getFrom());
        System.out.println("Subject:" + message.getSubject());
        System.out.println(message.getHtmlBody());
    }
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Recuperar información resumida del mensaje usando Id único

El cliente POP3 de la API puede recuperar información resumida del mensaje del servidor usando el id único del mensaje. Esto brinda acceso rápido a la información breve del mensaje sin tener que recuperar primero el mensaje completo del servidor. El siguiente fragmento de código muestra cómo recuperar la información resumida del mensaje.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String uniqueId = "unique id of a message from server";
Pop3Client client = new Pop3Client("host.domain.com", 456, "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
Pop3MessageInfo messageInfo = client.getMessageInfo(uniqueId);

if (messageInfo != null) {
    System.out.println(messageInfo.getSubject());
    System.out.println(messageInfo.getDate());
}

Listar mensajes con MultiConnection

Pop3Client proporciona un UseMultiConnection propiedad que puede usarse para crear múltiples conexiones para operaciones intensivas. También puede establecer el número de conexiones a usar durante el modo multiconexión mediante Pop3Client.ConnectionsQuantity. El siguiente fragmento de código demuestra el uso del modo multiconexión para listar mensajes y compara su rendimiento con el modo de conexión única.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");

pop3Client.setConnectionsQuantity(5);
pop3Client.setUseMultiConnection(MultiConnectionMode.Enable);
long multiConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol1 = pop3Client.listMessages();
long multiConnectionModeTimeSpan = System.currentTimeMillis() - multiConnectionModeStartTime;

pop3Client.setUseMultiConnection(MultiConnectionMode.Disable);
long singleConnectionModeStartTime = System.currentTimeMillis();
Pop3MessageInfoCollection messageInfoCol2 = pop3Client.listMessages();
long singleConnectionModeTimeSpan = System.currentTimeMillis() - singleConnectionModeStartTime;

System.out.println("multyConnectionModeTimeSpan: " + multiConnectionModeTimeSpan);
System.out.println("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan);
double performanceRelation = singleConnectionModeTimeSpan / multiConnectionModeTimeSpan;
System.out.println("Performance Relation: " + performanceRelation);

Obteniendo Mensajes del Servidor y Guardándolos en Disco

Guardar Mensaje en Disco sin Analizar

Si deseas descargar mensajes de correo del servidor POP3 sin analizarlos, usa el Pop3Client clase saveMessage función. El saveMessage función no analiza el mensaje de correo, por lo que es más rápido que el fetchMessage función. El siguiente fragmento de código muestra cómo guardar un mensaje por su número de secuencia, en este caso, el número 1. El saveMessage método guarda el mensaje en el formato EML original sin analizarlo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";
String dstEmail = dataDir + "InsertHeaders.eml";

// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username, password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

try {
    // Save message to disk by message sequence number
    client.saveMessage(1, dstEmail);
    client.dispose();
} catch (Exception ex) {
    System.out.println(ex.getMessage());
}
System.out.println("Retrieved email messages using POP3 ");

Analizar Mensaje Antes de Guardar

El siguiente fragmento de código usa el Pop3Client fetchMessage método para recuperar un mensaje de un servidor POP3 por su número de secuencia, luego guardar el mensaje en disco usando el asunto como nombre de archivo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "pop3/";

// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();

// Specify host, username and password, Port and SecurityOptions for your client
client.setHost("pop.gmail.com");
client.setUsername("your.username@gmail.com");
client.setPassword("your.password");
client.setPort(995);
client.setSecurityOptions(SecurityOptions.Auto);

try {
    // Fetch the message by its sequence number and Save the message using its subject as the file name
    MailMessage msg = client.fetchMessage(1);
    msg.save(dataDir + "first-message_out.eml", SaveOptions.getDefaultEml());
    client.dispose();
} catch (Exception ex) {
    System.out.println(ex.getMessage());
} finally {
    client.dispose();
}

Obtención de Mensajes en Grupo

Pop3Client proporciona un fetchMessages método que acepta un iterable de Números de Secuencia o ID Único y devuelve una lista de MailMessage. El siguiente fragmento de código demuestra el uso del fetchMessages método para obtener mensajes por Números de Secuencia e ID Único.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.setHost("<HOST>");
pop3Client.setPort(995);
pop3Client.setUsername("<USERNAME>");
pop3Client.setPassword("<PASSWORD>");

Pop3MessageInfoCollection messageInfoCol = pop3Client.listMessages();
System.out.println("ListMessages Count: " + messageInfoCol.size());

List<Integer> sequenceNumberAr = new ArrayList<Integer>();
List<String> uniqueIdAr = new ArrayList<String>();
for (Pop3MessageInfo mi : messageInfoCol) {
    sequenceNumberAr.add(mi.getSequenceNumber());
    uniqueIdAr.add(mi.getUniqueId());
}

for (MailMessage m : pop3Client.fetchMessagesBySequences(sequenceNumberAr)) {
    System.out.println("FetchMessages-sequenceNumberAr : " + m.getSubject());
}

for (MailMessage m : pop3Client.fetchMessagesByUids(uniqueIdAr)) {
    System.out.println("FetchMessages-uniqueIdAr : " + m.getSubject());
}

Filtrando Mensajes por Remitente, Destinatario o Fecha

El Pop3Client clase, descrita en Conectando a un servidor POP3, proporciona el listMessages método que obtiene todos los mensajes de un buzón. Para obtener solo los mensajes que coincidan con alguna condición, use el sobrecargado listMessages método que toma MailQuery como argumento. El MailQuery la clase proporciona varias propiedades para especificar las condiciones de la consulta, por ejemplo, fecha, asunto, remitente, destinatario, etc. El MailQueryBuilder la clase se usa para construir la expresión de búsqueda. Primero, se establecen todas las condiciones y restricciones y luego MailQuery se llena con la consulta desarrollada por MailQueryBuilder. El MailQuery objeto de clase es usado por Pop3Client para extraer la información filtrada del servidor. Este artículo muestra cómo filtrar mensajes de correo de un buzón. El primer ejemplo ilustra cómo filtrar mensajes basándose en una fecha y un asunto. También mostramos cómo filtrar por otros criterios y cómo construir consultas más complejas. También muestra la aplicación del filtro de Fecha y Hora para recuperar correos específicos del buzón. Además, muestra cómo aplicar filtrado sensible a mayúsculas.

Filtrando Mensajes del Buzón

Para filtrar mensajes de un buzón:

  1. Conectar e iniciar sesión en un servidor POP3.
  2. Cree una instancia de MailQuery y establecer las propiedades deseadas.
  3. Llame al Pop3Client.listMessages(MailQuery query) método y pasar el MailQuery en parámetros para obtener solo los mensajes filtrados.

El siguiente fragmento de código muestra cómo conectar a un buzón POP3 y obtener mensajes que llegaron hoy y tienen la palabra "newsletter" en el asunto.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to POP3
String host = "host";
int port = 110;
String username = "user@host.com";
String password = "password";
Pop3Client client = new Pop3Client(host, port, username, password);

// Set conditions, Subject contains "Newsletter", Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
Pop3MessageInfoCollection messages = client.listMessages(query);
System.out.println("Pop3: " + messages.size() + " message(s) found.");

Obteniendo Mensajes que Cumplen Criterios Específicos

Los ejemplos de código anteriores filtra mensajes basándose en el asunto y la fecha del correo. También podemos usar otras propiedades para establecer otras condiciones admitidas. A continuación, algunos ejemplos de cómo establecer las condiciones usando MailQuery.

Los fragmentos de código que siguen muestran cómo filtrar correos según otros criterios:

  • Buscar correos entregados hoy.
  • Buscar correos recibidos dentro de un rango.
  • Buscar correos de un remitente específico.
  • Buscar correos enviados desde un dominio específico.
  • Buscar correos enviados a un destinatario específico.

Fecha de Hoy

El siguiente fragmento de código muestra cómo encontrar correos entregados hoy.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

Rango de Fechas

El siguiente fragmento de código muestra cómo encontrar correos recibidos dentro de un rango.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived in last 7 days
Calendar calendar = Calendar.getInstance();

builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());

Remitente Específico

El siguiente fragmento de código muestra cómo encontrar correos de un remitente específico.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

Dominio Específico

El siguiente fragmento de código muestra cómo encontrar correos enviados desde un dominio específico.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

Destinatario Específico

El siguiente fragmento de código muestra cómo encontrar correos enviados a un destinatario específico.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

Construir consultas complejas

Si diferentes MailQueryBuilder las propiedades se establecen en declaraciones separadas, luego todas las condiciones se cumplirán. Por ejemplo, si queremos obtener mensajes entre un rango de fechas y de un host específico, necesitamos escribir tres declaraciones.

Combinar consultas con AND

El siguiente fragmento de código muestra cómo combinar consultas con AND.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");

Calendar calendar = Calendar.getInstance();

builder.getInternalDate().before(calendar.getTime());
calendar.add(Calendar.DATE, -7);
builder.getInternalDate().since(calendar.getTime());

Combinar consultas con OR

MailQueryBuilder proporciona el o método que toma dos MailQuery instancias como parámetros. Obtiene los mensajes que coinciden con cualquiera de las dos condiciones especificadas. El siguiente fragmento de código muestra cómo filtrar mensajes que tengan "test" en el asunto o "noreply@host.com" como remitente. El siguiente fragmento de código muestra cómo combinar consultas con OR.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

Aplicando Filtros Sensibles a Mayúsculas

La API también brinda la capacidad de filtrar correos del buzón basándose en criterios sensibles a mayúsculas. Los siguientes métodos permiten buscar correos especificando la bandera de sensibilidad a mayúsculas.

  • Método StringComparisonField.contains(String value, boolean ignoreCase)
  • Método StringComparisonField.equals(String value, boolean ignoreCase)
  • Método StringComparisonField.notContains(String boolean, bool ignoreCase)
  • Método StringComparisonField.notEquals(String boolean, bool ignoreCase)
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.listMessages(query1);