Filtrar e Ordenar Mensagens na Caixa de Correio Exchange usando EWS

Filtrar e Ordenar Mensagens usando EWS

IEWSClient a interface fornece o ListMessages() método que obtém todas as mensagens de uma caixa de correio. Para obter apenas mensagens que correspondam a alguma condição, use o sobrecarregado ListMessages() método que recebe o MailQuery classe como argumento. O MailQuery a classe 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 sensíveis a maiúsculas/minúsculas ao recuperar e‑mails da caixa de correio.

Filtrar Mensagens por Critério

Para obter mensagens filtradas de uma caixa de correio:

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

O trecho de código a seguir mostra como conectar a uma caixa de correio IMAP e obter mensagens que têm a string "Newsletter" no assunto e foram enviadas hoje.

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

Pela Data de Hoje

O trecho de código a seguir mostra como filtrar todos os e‑mails com base na data de hoje.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.InternalDate.On(DateTime.Now);

Por Intervalo de Datas

O trecho de código a seguir mostra como filtrar todos os e‑mails com base no intervalo de datas.

// Emails that arrived in last 7 days
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

Por Remetente

O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um remetente específico.

// Get emails from specific sender
builder.From.Contains("saqib.razzaq@127.0.0.1");

Por Domínio

O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um domínio específico.

// Get emails from specific domain
builder.From.Contains("SpecificHost.com");

Por Destinatário

O trecho de código a seguir mostra como filtrar todos os e‑mails com base em um destinatário específico.

// Get emails sent to specific recipient
builder.To.Contains("recipient");

Por ID da Mensagem

O trecho de código a seguir mostra como filtrar todos os e‑mails com base no MessageID.

// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.MessageId.Equals("MessageID");

Por Notificações de Entrega de Email

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

// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.ContentClass.Equals(ContentClassType.MDN.ToString());

Por Tamanho da Mensagem

builder1 = new ExchangeQueryBuilder();
builder1.ItemSize.Greater(80000);

Construindo consultas complexas

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

Combinando consultas com AND

O trecho de código a seguir mostra como combinar consultas com AND.

// 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 Or() método que aceita dois MailQuery instâncias 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 “test” no assunto ou “noreply@host.com” como remetente. O trecho de código a seguir mostra como combinar consultas com OR.

builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));

Filtragem de e‑mail sensível a maiúsculas/minúsculas

Emails podem ser filtrados com base em distinção de maiúsculas/minúsculas especificando o sinalizador IgnoreCase nos critérios de filtro, como mostrado no trecho de código a seguir.

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

Filtrar Mensagens com Suporte a Paginação

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;
}

Ordenar mensagens filtradas em ordem Ascendente/Descendente

A filtragem de email pode ser suportada com ordenação de mensagens em ordem ascendente/descendente. Neste caso, OrderBy método é usado para especificar a ordem em que os resultados de uma pesquisa de email são classificados usando a classe MailQueryBuilder. Esse método permite definir critérios de classificação para uma consulta de pesquisa, especificando se os resultados devem ser classificados em ordem ascendente ou descendente 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 indicada. Se o parâmetro ascending for true, isso significa que os resultados da pesquisa devem ser classificados em ordem ascendente. Por outro lado, se o parâmetro ascending for false, isso indica que os resultados da pesquisa devem ser classificados em ordem descendente.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // sort the subject ascending
builder.InternalDate.OrderBy(false); // sort the date descending

MailQuery query = builder.GetQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);

Na amostra de código acima, o método OrderBy é aplicado duas vezes, uma para o assunto e outra para a data dos emails. Como resultado da execução do método ListMessages com a solicitação passada, obteremos uma lista de mensagens cujo assunto contém a palavra "Report" e que foram recebidas na data especificada ou depois dela. Ao mesmo tempo, os resultados serão ordenados por assunto em ordem ascendente. Isso significa que as mensagens serão ordenadas alfabeticamente de A a Z, conforme seu assunto. Além disso, os resultados serão ordenados por data em ordem descendente. Isso significa que as postagens serão organizadas da mais recente para a mais antiga.

Filtrar Mensagens Usando AQS

Com o Aspose.Email para .NET, os usuários podem aproveitar os recursos poderosos da Sintaxe de Consulta Avançada (AQS) para filtrar mensagens diretamente de uma caixa de correio Exchange. A AQS oferece um método robusto e intuitivo de construir consultas que podem direcionar emails com precisão com base em critérios específicos, como data, remetente e assunto. Para informações mais detalhadas sobre sua integração nos processos de filtragem de email e exemplos de código abrangentes sobre a implementação da filtragem de mensagens usando AQS com Aspose.Email para .NET, consulte o Filtrar Mensagens com AQS de Caixa de Correio Exchange artigo.