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:
- Conecte-se ao servidor Exchange.
- Crie uma instância de MailQuery e defina as propriedades desejadas.
- 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
O 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.