Trabajando con Mensajes del Servidor

Obteniendo Información de la Buzón de Correo

Podemos obtener información sobre la bandeja de entrada, como el número de mensajes y el tamaño de la bandeja, utilizando los métodos GetMailBoxSize y GetMailBoxInfo de la clase Pop3Client.

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

  1. Crear un Pop3Client.
  2. Conectarse a un servidor POP3.
  3. Obtener el tamaño de la bandeja de entrada.
  4. Obtener información de la bandeja de entrada.
  5. Obtener el número de mensajes en la bandeja de entrada.
  6. Obtener el tamaño ocupado.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.Host = "pop.gmail.com";
client.Username = "your.username@gmail.com";
client.Password = "your.password";
client.Port = 995;
client.SecurityOptions = SecurityOptions.Auto;
// Get the size of the mailbox, Get mailbox info, number of messages in the mailbox
long nSize = client.GetMailboxSize();
Console.WriteLine("Mailbox size is " + nSize + " bytes.");
Pop3MailboxInfo info = client.GetMailboxInfo();
int nMessageCount = info.MessageCount;
Console.WriteLine("Number of messages in mailbox are " + nMessageCount);
long nOccupiedSize = info.OccupiedSize;
Console.WriteLine("Occupied size is " + nOccupiedSize);

Obteniendo el conteo de correos en la bandeja de entrada

El siguiente fragmento de código te muestra cómo contar los mensajes de correo en una bandeja de entrada.

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

Aspose.Email permite a los desarrolladores trabajar con correos electrónicos de muchas maneras diferentes. Por ejemplo, pueden recuperar información del encabezado antes de decidir si descargar un correo electrónico. O pueden recuperar correos electrónicos 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 Encabezados de Correo Electrónico

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. Típicamente, la información del encabezado contiene el remitente, el asunto, la fecha de recepción, etc. (Los encabezados de correo electrónico se describen en detalle en Personalizando Encabezados de Correo Electrónico. Ese tema es específicamente sobre el envío de un correo electrónico con SMTP, pero la información del contenido del encabezado sigue siendo válida para los correos electrónicos POP3). Los siguientes ejemplos muestran cómo recuperar encabezados de correo de un servidor POP3 por el número de secuencia del mensaje.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username. password, Port and SecurityOptions for your client
client.Host = "pop.gmail.com";
client.Username = "your.username@gmail.com";
client.Password = "your.password";
client.Port = 995;
client.SecurityOptions = SecurityOptions.Auto;
try
{
HeaderCollection headers = client.GetMessageHeaders(1);
for (int i = 0; i < headers.Count; i++)
{
// Display key and value in the header collection
Console.Write(headers.Keys[i]);
Console.Write(" : ");
Console.WriteLine(headers.Get(i));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
client.Dispose();
}

Recuperando Mensajes de Correo Electrónico

La clase Pop3Client proporciona la capacidad de recuperar mensajes de correo electrónico del servidor POP3 y analizarlos en una instancia de MailMessage con la ayuda de los componentes MailMessage. La clase MailMessage contiene varias propiedades y métodos para manipular el contenido del correo electrónico. Al usar el método FetchMessage de la clase Pop3Client, puedes obtener una instancia de MailMessage directamente desde el servidor POP3. El siguiente fragmento de código te 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-.NET
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username, password, Port and SecurityOptions for your client
client.Host = "pop.gmail.com";
client.Username = "your.username@gmail.com";
client.Password = "your.password";
client.Port = 995;
client.SecurityOptions = 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);
Console.WriteLine("From:" + message.From);
Console.WriteLine("Subject:" + message.Subject);
Console.WriteLine(message.HtmlBody);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
client.Dispose();
}

Recuperando Información de Resumen del Mensaje usando Id Único

El cliente POP3 de la API puede recuperar información de resumen del mensaje desde el servidor usando el id único del mensaje. Esto proporciona 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 te muestra cómo recuperar información de resumen del mensaje.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string uniqueId = "unique id of a message from server";
Pop3Client client = new Pop3Client("host.domain.com", 456, "username", "password");
client.SecurityOptions = SecurityOptions.Auto;
Pop3MessageInfo messageInfo = client.GetMessageInfo(uniqueId);
if (messageInfo != null)
{
Console.WriteLine(messageInfo.Subject);
Console.WriteLine(messageInfo.Date);
}

Listando Mensajes con MultiConexión

Pop3Client proporciona una propiedad UseMultiConnection que puede ser utilizada para crear múltiples conexiones para operaciones pesadas. También puedes establecer el número de conexiones que se utilizarán durante el modo de multi-conexión usando Pop3Client.ConnectionsQuantity. El siguiente fragmento de código demuestra el uso del modo de multi-conexió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-.NET
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.Host = "<HOST>";
pop3Client.Port = 995;
pop3Client.Username = "<USERNAME>";
pop3Client.Password = "<PASSWORD>";
pop3Client.ConnectionsQuantity = 5;
pop3Client.UseMultiConnection = MultiConnectionMode.Enable;
DateTime multiConnectionModeStartTime = DateTime.Now;
Pop3MessageInfoCollection messageInfoCol1 = pop3Client.ListMessages();
TimeSpan multiConnectionModeTimeSpan = DateTime.Now - multiConnectionModeStartTime;
pop3Client.UseMultiConnection = MultiConnectionMode.Disable;
DateTime singleConnectionModeStartTime = DateTime.Now;
Pop3MessageInfoCollection messageInfoCol2 = pop3Client.ListMessages();
TimeSpan singleConnectionModeTimeSpan = DateTime.Now - singleConnectionModeStartTime;
Console.WriteLine("multyConnectionModeTimeSpan: " + multiConnectionModeTimeSpan.TotalMilliseconds);
Console.WriteLine("singleConnectionModeTimeSpan: " + singleConnectionModeTimeSpan.TotalMilliseconds);
double performanceRelation = singleConnectionModeTimeSpan.TotalMilliseconds / multiConnectionModeTimeSpan.TotalMilliseconds;
Console.WriteLine("Performance Relation: " + performanceRelation);

Recuperando Mensajes del Servidor y Guardando en Disco

Guardar Mensaje en Disco sin Analizar

Si deseas descargar mensajes de correo del servidor POP3 sin analizarlos, utiliza la función SaveMessage de la clase Pop3Client. La función SaveMessage no analiza el mensaje de correo, por lo que es más rápido que la función FetchMessage. El siguiente fragmento de código muestra cómo guardar un mensaje por su número de secuencia. En este caso, el método SaveMessage 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-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_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.Host = "pop.gmail.com";
client.Username = "your.username@gmail.com";
client.Password = "your.password";
client.Port = 995;
client.SecurityOptions = SecurityOptions.Auto;
try
{
// Save message to disk by message sequence number
client.SaveMessage(1, dstEmail);
client.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine(Environment.NewLine + "Retrieved email messages using POP3 ");

Analizar el Mensaje Antes de Guardar

El siguiente fragmento de código utiliza el método FetchMessage de Pop3Client para recuperar un mensaje de un servidor POP3 por su número de secuencia, y luego guarda 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-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_POP3();
// Create an instance of the Pop3Client class
Pop3Client client = new Pop3Client();
// Specify host, username and password, Port and SecurityOptions for your client
client.Host = "pop.gmail.com";
client.Username = "your.username@gmail.com";
client.Password = "your.password";
client.Port = 995;
client.SecurityOptions = 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.DefaultEml);
client.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(Environment.NewLine + ex.Message);
}
finally
{
client.Dispose();
}

Recuperación Agrupada de Mensajes

Pop3Client proporciona un método FetchMessages que acepta números de secuencia o ID únicos iterables y devuelve una lista de MailMessage. El siguiente fragmento de código demuestra el uso del método FetchMessages para recuperar mensajes por números de secuencia y ID únicos.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create an instance of the Pop3Client class
Pop3Client pop3Client = new Pop3Client();
pop3Client.Host = "<HOST>";
pop3Client.Port = 995;
pop3Client.Username = "<USERNAME>";
pop3Client.Password = "<PASSWORD>";
Pop3MessageInfoCollection messageInfoCol = pop3Client.ListMessages();
Console.WriteLine("ListMessages Count: " + messageInfoCol.Count);
int[] sequenceNumberAr = messageInfoCol.Select((Pop3MessageInfo mi) => mi.SequenceNumber).ToArray();
string[] uniqueIdAr = messageInfoCol.Select((Pop3MessageInfo mi) => mi.UniqueId).ToArray();
IList<MailMessage> fetchedMessagesBySNumMC = pop3Client.FetchMessages(sequenceNumberAr);
Console.WriteLine("FetchMessages-sequenceNumberAr Count: " + fetchedMessagesBySNumMC.Count);
IList<MailMessage> fetchedMessagesByUidMC = pop3Client.FetchMessages(uniqueIdAr);
Console.WriteLine("FetchMessages-uniqueIdAr Count: " + fetchedMessagesByUidMC.Count);

Filtrando Mensajes por Remitente, Destinatario o Fecha

La clase Pop3Client, descrita en Conectando a un Servidor POP3, proporciona el método ListMessages() que obtiene todos los mensajes de una bandeja de entrada. Para obtener solo los mensajes que coinciden con alguna condición, utiliza el método sobrecargado ListMessages() que toma MailQuery como argumento. La clase MailQuery proporciona varias propiedades para especificar las condiciones de consulta, por ejemplo, fecha, asunto, remitente, destinatario, etc. La clase MailQueryBuilder se usa para construir la expresión de búsqueda. Primero, se establecen todas las condiciones y restricciones y luego MailQuery se completa con la consulta desarrollada por MailQueryBuilder. El objeto de la clase MailQuery es utilizado por Pop3Client para extraer la información filtrada del servidor. Este artículo muestra cómo filtrar mensajes de correo electrónico de una bandeja de entrada. El primer ejemplo ilustra cómo filtrar mensajes en función de la fecha y el asunto. También mostramos cómo filtrar según otros criterios y cómo construir consultas más complejas. También muestra la aplicación de un filtro de fecha y hora para recuperar correos electrónicos específicos de la bandeja de entrada. Además, también se muestra cómo aplicar filtros que diferencian mayúsculas y minúsculas.

Filtrando Mensajes de la Bandeja de Entrada

Para filtrar mensajes de una bandeja de entrada:

  1. Conéctate e inicia sesión en un servidor POP3.
  2. Crea una instancia de MailQuery y establece las propiedades deseadas.
  3. Llama al método Pop3Client.ListMessages(MailQuery query) y pasa el MailQuery como parámetro para obtener solo los mensajes filtrados.

El siguiente fragmento de código te muestra cómo conectarte a una bandeja de entrada POP3 y obtener los 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-.NET
// Connect and log in to POP3
const string host = "host";
const int port = 110;
const string username = "user@host.com";
const 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.Subject.Contains("Newsletter");
builder.InternalDate.On(DateTime.Now);
// Build the query and Get list of messages
MailQuery query = builder.GetQuery();
Pop3MessageInfoCollection messages = client.ListMessages(query);
Console.WriteLine("Pop3: " + messages.Count + " message(s) found.");

Obteniendo Mensajes que Cumplen Criterios Específicos

Los ejemplos de código anteriores muestran cómo puedes filtrar mensajes en función del asunto del correo y la fecha. También podemos usar otras propiedades para establecer otras condiciones admitidas. A continuación se presentan algunos ejemplos de establecer condiciones usando MailQuery.

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

  • Encontrar correos electrónicos entregados hoy.
  • Encontrar correos electrónicos recibidos dentro de un rango.
  • Encontrar correos electrónicos de un remitente específico.
  • Encontrar correos electrónicos enviados desde un dominio específico.
  • Encontrar correos electrónicos enviados a un destinatario específico.

Fecha de Hoy

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.InternalDate.On(DateTime.Now);

Rango de Fechas

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails that arrived in last 7 days
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

Remitente Específico

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

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

Dominio Específico

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

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

Destinatario Específico

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

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

Construyendo Consultas Complejas

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

Combinando Consultas con AND

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.From.Contains("SpecificHost.com");
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

Combinando Consultas con OR

MailQueryBuilder proporciona el método Or() que toma dos instancias de MailQuery 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 te muestra cómo combinar consultas usando OR.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Specify OR condition
builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));

Aplicando Filtros Sensibles a Mayúsculas y Minúsculas

La API también proporciona la capacidad de filtrar correos electrónicos de la bandeja de entrada basándose en un criterio sensible a mayúsculas y minúsculas. Los siguientes métodos ofrecen la capacidad de buscar correos electrónicos especificando una bandera sensible a mayúsculas y minúsculas.

  • Método Aspose.Email.StringComparisonField.Contains(string value, bool ignoreCase)
  • Método Aspose.Email.StringComparisonField.Equals(string value, bool ignoreCase)
  • Método Aspose.Email.StringComparisonField.NotContains(string value, bool ignoreCase)
  • Método Aspose.Email.StringComparisonField.NotEquals(string value, bool ignoreCase)
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.From.Contains("tesT", true);
MailQuery query1 = builder1.GetQuery();
Pop3MessageInfoCollection messageInfoCol1 = client.ListMessages(query1);