Filtrar Mensagens da Caixa de Correio Exchange

Filtrando Mensagens usando EWS

A interface IEWSClient fornece o método ListMessages() que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondem a alguma condição, use o método ListMessages() sobrecarga que recebe a classe MailQuery como argumento. A classe MailQuery fornece várias propriedades para especificar condições, por exemplo, data, assunto, remetente e destinatário. Além disso, a API também permite aplicar filtros de sensibilidade a maiúsculas e minúsculas para recuperar e-mails da caixa de correio.

Filtrar Mensagens com Base em Critérios

Para obter mensagens filtradas de uma caixa de correio:

  1. Conecte-se ao servidor Exchange.
  2. Crie uma instância de MailQuery e defina as propriedades desejadas.
  3. Chame o método IEWSClient.ListMessages() e passe o MailQuery nos parâmetros para obter apenas as mensagens filtradas.

O seguinte trecho de código mostra como se conectar a uma caixa de correio IMAP e obter mensagens que contêm a string “Newsletter” no assunto e que foram enviadas hoje.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
try
{
// Connect to EWS
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
const string username = "username";
const string password = "password";
const string domain = "domain";
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, username, password, domain);
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Set Subject and Emails that arrived today
builder.Subject.Contains("Newsletter");
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);
Console.WriteLine("EWS: " + messages.Count + " message(s) found.");
// Disconnect from EWS
client.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

Filtrar Mensagens pela Data de Hoje

O seguinte trecho de código mostra como filtrar todos os e-mails com base na data de hoje.

// 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);

Filtrar Mensagens por Intervalo de Datas

O seguinte trecho de código mostra como filtrar todos os e-mails com base no intervalo de datas.

// 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));

Filtrar Mensagens por Remetente Específico

O seguinte trecho de código mostra como filtrar todos os e-mails com base em um remetente 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");

Filtrar Mensagens por Domínio Específico

O seguinte trecho de código mostra como filtrar todos os e-mails com base em um domínio 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");

Filtrar Mensagens por Destinatário Específico

O seguinte trecho de código mostra como filtrar todos os e-mails com base em um destinatário 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");

Filtrar Mensagens pelo MessageID

O seguinte trecho de código mostra como filtrar todos os e-mails com base no MessageID.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.MessageId.Equals("MessageID");

Filtrar Mensagens por Todas as Notificações de Entrega de Correio

O seguinte trecho de código mostra como filtrar todos os e-mails com base em todas as notificações de entrega de correio.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.ContentClass.Equals(ContentClassType.MDN.ToString());

Filtrar Mensagens por Tamanho da Mensagem

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
builder1 = new ExchangeQueryBuilder();
builder1.ItemSize.Greater(80000);

Construindo Consultas Complexas

Se diferentes propriedades do MailQueryBuilder forem definidas em uma declaração separada, todas as condições serão correspondidas. Por exemplo, para obter uma mensagem em um intervalo de datas específico e de um host específico, escreva três declarações:

Combinando Consultas com AND

O seguinte trecho de código mostra como combinar consultas com 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 com OR

MailQueryBuilder fornece o método Or() que recebe duas instâncias de MailQuery como parâmetros. Ele obtém mensagens que correspondem a qualquer uma das duas condições especificadas. O exemplo abaixo filtra mensagens que têm a palavra “teste” no assunto ou “noreply@host.com” como remetente. O seguinte trecho de código mostra como combinar consultas com OR.

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

Filtragem de E-mails Sensíveis a Maiúsculas e Minúsculas

Os e-mails podem ser filtrados com base na sensibilidade a maiúsculas e minúsculas, especificando a flag IgnoreCase nos critérios de filtragem, conforme mostrado no seguinte trecho de código.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.Subject.Contains("Newsletter", true);
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();

Filtrando Mensagens com Suporte a Paginação

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
int itemsPerPage = 5;
string sGuid = Guid.NewGuid().ToString();
string str1 = sGuid + " - " + "Query 1";
string str2 = sGuid + " - " + "Query 2";
MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.Subject.Contains(str1);
MailQuery query1 = queryBuilder1.GetQuery();
List<ExchangeMessagePageInfo> pages = new List<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage);
pages.Add(pageInfo);
int str1Count = pageInfo.Items.Count;
while (!pageInfo.LastPage)
{
pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage, pageInfo.PageOffset + 1);
pages.Add(pageInfo);
str1Count += pageInfo.Items.Count;
}

Ordenando mensagens filtradas em ordem crescente/decrescente

A filtragem de e-mails pode ser suportada com a ordenação de mensagens em ordem crescente/decrescente. Neste caso, o método OrderBy é usado para especificar a ordem em que os resultados de uma pesquisa de e-mail são ordenados usando a classe MailQueryBuilder. Este método permite que você defina critérios de ordenação para uma consulta de pesquisa, especificando se os resultados devem ser ordenados em ordem crescente ou decrescente com base em uma propriedade específica.

O método aceita o parâmetro ascending, que especifica a ordem de classificação para a propriedade especificada. Se o parâmetro ascending for verdadeiro, isso significa que os resultados da pesquisa devem ser ordenados em ordem crescente. Por outro lado, se o parâmetro ascending for falso, isso significa que os resultados da pesquisa devem ser ordenados em ordem decrescente.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // ordena o assunto em ordem crescente
builder.InternalDate.OrderBy(false); // ordena a data em ordem decrescente

MailQuery query = builder.GetQuery();

// Obtenha a lista de mensagens
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);

No trecho de código acima, o método OrderBy é aplicado duas vezes, uma para o assunto e outra para a data dos e-mails. Como resultado da execução do método ListMessages com a solicitação enviada, obteremos uma lista de mensagens com o assunto contendo a palavra “Report” que foram recebidas na data especificada ou depois dessa data. Ao mesmo tempo, os resultados serão ordenados por assunto em ordem crescente. Isso significa que as mensagens serão organizadas alfabeticamente de A a Z, dependendo do seu assunto. Além disso, os resultados serão ordenados por data em ordem decrescente. Isso significa que as postagens serão organizadas do mais novo para o mais antigo.