Gerencie Mensagens de Email e Anexos com o Microsoft Graph
Aspose.Email IGraphClient fornece uma ampla gama de métodos para gerenciar mensagens de e‑mail e seus anexos via Microsoft Graph.
Operações Disponíveis:
-
Listar mensagens
-
Filtrar e paginar mensagens
-
Buscar o conteúdo da mensagem
-
Criar e enviar mensagens (incluindo rascunhos e EML)
-
Copiar e mover mensagens
-
Gerenciar anexos (criar, buscar, excluir, listar)
- Listar mensagens
- Buscar mensagem
- Criar mensagem
- Enviar mensagem
- CopyMessage mensagem
- Mover mensagem
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
Listar Mensagens
Para recuperar mensagens de uma pasta como "Caixa de Entrada", use o ListMessages método.
- Recupere a lista de pastas usando client.ListFolders().
- Percorra cada pasta.
- Verifique se o nome exibido da pasta é "Inbox".
- Se for, liste as mensagens na caixa de entrada usando client.ListMessages(folder.ItemId).
- Percorra cada mensagem na caixa de entrada.
- Imprima o assunto de cada mensagem no console.
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
foreach (var messageInfo in inboxMessages)
{
Console.WriteLine(messageInfo.Subject);
}
}
}
Listar Mensagens Assincronamente com Microsoft Graph
O exemplo de código a seguir demonstra como acessar a pasta Caixa de Entrada, buscar uma página de mensagens de email com ListMessagesAsync, e imprima seus assuntos:
var folders = await client.ListFoldersAsync();
foreach (var folder in folders)
{
Console.WriteLine(folder.DisplayName);
}
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgsPage = await client.ListMessagesAsync(folderId, new PageInfo(15) { PageOffset = 0 }, null);
var msgs = msgsPage.Items;
foreach (var msg in msgs)
{
Console.WriteLine(msg.Subject);
}
Filtrar Mensagens por Data de Envio
O OrderBy método da coleção de biblioteca permite recuperar mensagens com diferentes ordens de classificação (crescente e decrescente) com base na data de envio. O exemplo de código a seguir mostra como ordenar mensagens pela data de envio:
-
Inicialize o Graph Client
- Crie uma instância de IGraphClient usando GraphClient.GetClient() com o provedor e TenantId.
-
Criar Query Builder
- Instancie um GraphQueryBuilder objeto.
-
Ordenar Mensagens por Data em:
-
Ordem Descendente
- Usar
builder.SentDate.OrderBy(false)para definir a ordem como descendente. - Chame client.ListMessages() para obter mensagens da Caixa de Entrada com limite de 10, usando a consulta de builder.GetQuery().
- Armazene as mensagens recuperadas na variável messages.
- Usar
-
Ordem Ascendente
- Defina a ordem como ascendente chamando
builder.SentDate.OrderBy(true). - Usar client.ListMessages() novamente para buscar mensagens da Caixa de Entrada, agora em ordem ascendente.
- Armazene essas mensagens na variável messages.
- Defina a ordem como ascendente chamando
IGraphClient client = GraphClient.GetClient(provider, TenantId);
var builder = new GraphQueryBuilder();
// create orderby messages query 'DESC'
builder.SentDate.OrderBy(false);
var messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
var messages = messagePageInfo.Items;
builder.Clear();
// create orderby messages query 'ASC'
builder.SentDate.OrderBy(true);
messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
messages = messagePageInfo.Items;
Listar Mensagens com Paginação e Filtragem
Use paginação ao trabalhar com caixas de correio grandes. O exemplo abaixo recupera mensagens não lidas em páginas de 10 e as marca como lidas após o processamento:
- Inicie o cliente.
- Defina o número de itens a exibir por página, por exemplo, 10.
- Crie um filtro para recuperar apenas mensagens não lidas usando o GraphQueryBuilder classe. O
builder.IsRead.Equals(false)está definindo a condição para filtrar mensagens não lidas. - Chame o ListMessages método no objeto cliente, especificando a pasta (Inbox) e o número de itens por página (PageInfo(itemsPerPage)) como parâmetros. Também passa o objeto de consulta para aplicar o filtro de mensagens não lidas. O objeto PageInfo retornado (pageInfo) contém as mensagens recuperadas para a página atual na propriedade Items.
- Crie um loop que continue até que a última página seja alcançada (pageInfo.LastPage é false). As mensagens recuperadas são adicionadas à lista de mensagens existente usando
messages.AddRange(pageInfo.Items).
// reading unread messages with paging
using var client = GraphClient.GetClient(tokenProvider, config.Tenant);
// paging option
var itemsPerPage = 10;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.IsRead.Equals(false);
var query = builder.GetQuery();
// list messages
var pageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(itemsPerPage), query);
var messages = pageInfo.Items;
while (!pageInfo.LastPage)
{
pageInfo = client.ListMessages(KnownFolders.Inbox, pageInfo.NextPage, query);
messages.AddRange(pageInfo.Items);
}
// set messages state as read
foreach (var message in messages)
{
client.SetRead(message.ItemId);
}
Buscar uma Mensagem
Recupere o conteúdo completo de uma mensagem específica. O exemplo de código a seguir demonstra como recuperar e exibir a mensagem mais recente na Caixa de Entrada para visualização ou processamento:
- Chame client.ListFolders() para recuperar todas as pastas disponíveis na caixa de correio e armazená‑las na variável folders.
- Itere por cada pasta na coleção de pastas usando um loop foreach.
- Dentro do loop, verifique se o nome exibido da pasta é "Inbox".
- Se a pasta for a Caixa de Entrada, recupere as mensagens usando client.ListMessages() com o ItemId da pasta.
- Verifique se há mensagens na caixa de entrada confirmando que inboxMessages.Count é maior que 0.
- Se houver mensagens, obtenha a primeira mensagem usando client.FetchMessage() com o ItemId da primeira mensagem.
- Exiba o corpo HTML da mensagem obtida.
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
if (inboxMessages.Count > 0)
{
// fetch the first message in inbox
var msg = client.FetchMessage(inboxMessages[0].ItemId);
Console.WriteLine(msg.BodyHtml);
}
}
}
Consultas Microsoft Graph com OData
Aspose.Email para .NET fornece suporte a consultas OData para Microsoft Graph. Isso permite que os desenvolvedores apliquem filtragem avançada, ordenação, seleção, paginação e expansão ao trabalhar com recursos do Graph como pastas, mensagens, contatos, itens de calendário e mais. O Aspose.Email.Clients.Graph.ODataQueryBuilder classe é construída para montar parâmetros de consulta OData de forma estruturada em vez de construir manualmente strings de consulta. Dessa forma, você pode recuperar apenas os campos necessários (Select) para eficiência, usar filtragem (Filter) e ordenação (OrderBy) para organizar os dados. Você também pode implementar paginação (Top, Skip) para grandes conjuntos de dados, expandir entidades relacionadas (Expand) em uma única chamada, e habilitar a contagem e a pesquisa de texto completo para cenários avançados.
Abaixo está a lista de GraphClient métodos que suportam um ** opcionalODataQueryBuilder** parâmetro:**
ListFoldersListMessagesListContactsListCalendarItemsListAttachmentsListCategoriesListOverridesListRulesListTaskListsListTasksListNotebooks
O exemplo de código a seguir demonstra como usar ODataQueryBuilder para listar pastas e recuperar mensagens de email filtradas, ordenadas e paginadas de uma caixa de correio:
var accessParameters = Settings.User1;
var provider = new AzureConfidentialTokenProvider(
accessParameters.TenantId,
accessParameters.ClientId,
accessParameters.ClientSecret);
var client = GraphClient.GetClient(provider, accessParameters.TenantId);
client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";
// Example 1: List folders ordered by name
var builder = new ODataQueryBuilder { OrderBy = "name asc" };
var folders = client.ListFolders(builder);
foreach (var folder in folders)
{
Console.WriteLine(folder.DisplayName);
}
// Example 2: Retrieve filtered and paged messages from Inbox
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
builder = new ODataQueryBuilder
{
Filter = "startswith(name,'A')",
OrderBy = "name asc",
Top = 10,
Skip = 5,
Select = new[] { "name", "age" },
Expand = new[] { "children", "parents" },
Count = true,
Search = "\"John Doe\"",
Format = "json"
};
var msgs = client.ListMessages(folderId, builder);
foreach (var msg in msgs)
{
Console.WriteLine(msg.Subject);
}
Criar uma Mensagem
Use o CreateMessage método para salvar uma nova mensagem diretamente em uma pasta específica, como a Caixa de Entrada. O exemplo a seguir demonstra como construir um MapiMessage e adicioná‑la à caixa de correio.
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
// create message in inbox
client.CreateMessage(KnownFolders.Inbox, msg);
Enviar Mensagens
O Enviar método de IGraphClient permite que você envie uma mensagem de email diretamente usando um MapiMessage objeto. Neste exemplo, uma mensagem simples é criada, configurada com detalhes de remetente e destinatário, e então enviada.
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// send message
client.Send(msg);
Enviar uma Mensagem de Rascunho
Você pode salvar uma mensagem na pasta Rascunhos e enviá‑la posteriormente usando IGraphClient. Esta abordagem permite que você prepare uma mensagem, revise ou modifique‑a antes de enviá‑la, e então despache‑a quando estiver pronta. O exemplo de código a seguir demonstra como criar um email, adicionar metadados, armazená‑lo como rascunho e, em seguida, enviá‑lo:
- Crie um MapiMessage com assunto, corpo e destinatários.
- Defina os detalhes do remetente usando as propriedades da mensagem.
- Salve a mensagem na pasta Rascunhos usando CreateMessage.
- Envie o rascunho passando seu ItemId para o Send() método.
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// add message to Draft folder
var draftMessage = client.CreateMessage(KnownFolders.Drafts, msg);
// send a draft message
client.Send(draftMessage.ItemId);
Enviar uma Mensagem EML
Use o MailMessage classe para criar e enviar mensagens no formato EML. O exemplo de código a seguir demonstra como criar e enviar uma mensagem de email usando a Graph API:
// prepare the message
var eml = new MailMessage
{
From = "from@domain.com",
To = "to1@domain.com, to2@domain.com",
Subject = "New message",
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
// send the message
graphClient.Send(eml);
graphClient.Create(KnownFolders.Inbox, eml);
Copiar Mensagens
Para criar um duplicado de uma mensagem de email existente, use o CopyMessage método do IGraphClient interface.
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
Mover Mensagens
Para mover uma mensagem de email existente de sua localização atual para uma nova pasta, use o MoveMessage método do IGraphClient interface.
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
Gerenciar Anexos
O IGraphClient A funcionalidade no Aspose.Email para .NET permite que você trabalhe com anexos de email de forma programática. Isso inclui criar, recuperar, excluir e listar anexos associados a uma mensagem. O exemplo de código a seguir demonstra o gerenciamento completo do ciclo de vida dos anexos para mensagens do Outlook via Microsoft Graph API usando Aspose.Email. Você pode personalizar o conteúdo e os metadados dos anexos conforme necessário.
// create an attachment
var attachment = new MapiAttachment();
attachment.SetProperty(KnownPropertyList.DisplayName, "My Attachment");
attachment.SetProperty(KnownPropertyList.AttachDataBinary, new byte[1024]);
// add an attachment to message
var createdAttachment = client.CreateAttachment(messageInfo.ItemId, attachment);
// fetch a message attachment
var fetchedAttachment = client.FetchAttachment(createdAttachment.ItemId);
// delete a message attachment
client.DeleteAttachment(createdAttachment.ItemId);
// list the message attachments
var attachments = client.ListAttachments(messageInfo.ItemId);