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.
- El método GetMailBoxSize devuelve el tamaño de la bandeja de entrada en bytes.
- El método GetMailBoxInfo devuelve un objeto de tipo Pop3MailBoxInfo.
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:
- Crear un Pop3Client.
- Conectarse a un servidor POP3.
- Obtener el tamaño de la bandeja de entrada.
- Obtener información de la bandeja de entrada.
- Obtener el número de mensajes en la bandeja de entrada.
- 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:
- Conéctate e inicia sesión en un servidor POP3.
- Crea una instancia de MailQuery y establece las propiedades deseadas.
- 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); |