Zarządzaj wiadomościami e-mail i załącznikami przy użyciu Microsoft Graph
Aspose.Email IGraphClient udostępnia szeroki zakres metod do zarządzania wiadomościami e-mail i ich załącznikami za pośrednictwem Microsoft Graph.
Dostępne operacje:
-
Wyświetl wiadomości
-
Filtruj i stronicuj wiadomości
-
Pobierz treść wiadomości
-
Twórz i wysyłaj wiadomości (w tym wersje robocze i EML)
-
Kopiuj i przenoś wiadomości
-
Zarządzaj załącznikami (tworzenie, pobieranie, usuwanie, wyświetlanie)
- Lista wiadomości
- Pobierz wiadomość
- Utwórz wiadomość
- Wyślij wiadomość
- CopyMessage wiadomość
- Przenieś wiadomość
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
Wyświetl wiadomości
Aby pobrać wiadomości z folderu, takiego jak "Inbox", użyj ListMessages metoda.
- Pobierz listę folderów przy użyciu client.ListFolders().
- Iteruj przez każdy folder.
- Sprawdź, czy wyświetlana nazwa folderu to "Inbox".
- Jeśli tak, wylistuj wiadomości w skrzynce odbiorczej używając client.ListMessages(folder.ItemId).
- Iteruj przez każdą wiadomość w skrzynce odbiorczej.
- Wypisz temat każdej wiadomości w konsoli.
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);
}
}
}
Wymień wiadomości asynchronicznie przy użyciu Microsoft Graph
Poniższy przykład kodu demonstruje, jak uzyskać dostęp do folderu Skrzynka odbiorcza, pobrać stronę wiadomości e‑mail z ListMessagesAsync, i wydrukuj ich tematy:
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);
}
Filtrowanie wiadomości według daty wysłania
Ten OrderBy metoda z kolekcji bibliotecznej umożliwia pobranie wiadomości w różnych kolejnościach sortowania (rosnącej i malejącej) w oparciu o datę wysłania. Poniższy przykład kodu pokazuje, jak posortować wiadomości według daty ich wysłania:
-
Zainicjuj Graph Client
- Utwórz instancję IGraphClient przy użyciu GraphClient.GetClient() z dostawcą i TenantId.
-
Utwórz konstruktor zapytań
- Zainstancjuj GraphQueryBuilder obiekt.
-
Sortuj wiadomości według daty w:
-
Kolejność malejąca
- Użyj
builder.SentDate.OrderBy(false)aby ustawić kolejność malejącą. - Wywołaj client.ListMessages() aby pobrać wiadomości z Skrzynki odbiorczej z limitem 10, używając zapytania z builder.GetQuery().
- Zapisz pobrane wiadomości w zmiennej messages.
- Użyj
-
Kolejność rosnąca
- Ustaw kolejność rosnącą, wywołując
builder.SentDate.OrderBy(true). - Użyj client.ListMessages() ponownie, aby pobrać wiadomości z Skrzynki odbiorczej, teraz w kolejności rosnącej.
- Zapisz te wiadomości w zmiennej messages.
- Ustaw kolejność rosnącą, wywołując
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;
Wymień wiadomości ze stronicowaniem i filtrowaniem
Używaj stronicowania przy pracy z dużymi skrzynkami pocztowymi. Poniższy przykład pobiera nieprzeczytane wiadomości w partiach po 10 i oznacza je jako przeczytane po przetworzeniu:
- Zainicjuj klienta.
- Ustaw liczbę elementów wyświetlanych na stronę, na przykład 10.
- Utwórz filtr, aby pobrać wyłącznie nieprzeczytane wiadomości przy użyciu GraphQueryBuilder klasa. Ta
builder.IsRead.Equals(false)ustawia warunek filtrowania nieprzeczytanych wiadomości. - Wywołaj ListMessages metoda na obiekcie klienta, określająca folder (Inbox) oraz liczbę elementów na stronę (PageInfo(itemsPerPage)) jako parametry. Przekazuje również obiekt zapytania, aby zastosować filtr nieprzeczytanych wiadomości. Zwrócony obiekt PageInfo (pageInfo) zawiera pobrane wiadomości dla bieżącej strony w własności Items.
- Utwórz pętlę, która trwa aż do osiągnięcia ostatniej strony (pageInfo.LastPage jest false). Pobrane wiadomości są dodawane do istniejącej listy wiadomości przy użyciu
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);
}
Pobierz wiadomość
Pobierz pełną zawartość określonej wiadomości. Poniższy przykład kodu demonstruje, jak pobrać i wyświetlić najnowszą wiadomość w Skrzynce odbiorczej w celu wyświetlenia lub przetworzenia:
- Wywołaj client.ListFolders() aby pobrać wszystkie dostępne foldery w skrzynce pocztowej i zapisać je w zmiennej folders.
- Iteruj przez każdy folder w kolekcji folderów używając pętli foreach.
- Wewnątrz pętli sprawdź, czy wyświetlana nazwa folderu równa się "Inbox".
- Jeśli folder to Skrzynka odbiorcza, pobierz wiadomości przy użyciu client.ListMessages() z ItemId folderu.
- Sprawdź, czy w skrzynce odbiorczej znajdują się wiadomości, weryfikując, że inboxMessages.Count jest większy niż 0.
- Jeśli są wiadomości, pobierz pierwszą wiadomość przy użyciu client.FetchMessage() z ItemId pierwszej wiadomości.
- Wyświetl treść HTML pobranej wiadomości.
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);
}
}
}
Zapytania Microsoft Graph z OData
Aspose.Email dla .NET zapewnia obsługę zapytań OData dla Microsoft Graph. Pozwala to programistom stosować zaawansowane filtrowanie, sortowanie, wybór, stronicowanie i rozwijanie przy pracy z zasobami Graph, takimi jak foldery, wiadomości, kontakty, elementy kalendarza i inne. Aspose.Email.Clients.Graph.ODataQueryBuilder klasa jest budowana do konstruowania parametrów zapytań OData w uporządkowany sposób zamiast ręcznego budowania ciągów zapytań. Dzięki temu możesz pobrać tylko niezbędne pola (Select) dla wydajności, użyj filtrowania (Filter) oraz sortowanie (OrderBy) aby uporządkować dane. Możesz także wdrożyć paginację (Top, Skip) dla dużych zestawów danych, rozwiń powiązane jednostki (Expand) w jednym wywołaniu oraz umożliwiają liczenie i wyszukiwanie pełnotekstowe w zaawansowanych scenariuszach.
Poniżej znajduje się lista GraphClient metody, które obsługują opcjonalny ODataQueryBuilder parametr:**
ListFoldersListMessagesListContactsListCalendarItemsListAttachmentsListCategoriesListOverridesListRulesListTaskListsListTasksListNotebooks
Poniższy przykład kodu pokazuje, jak używać ODataQueryBuilder aby wymienić foldery i pobrać filtrowane, posortowane oraz stronicowane wiadomości e‑mail ze skrzynki pocztowej:
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);
}
Utwórz wiadomość
Użyj CreateMessage metoda do bezpośredniego zapisywania nowej wiadomości w określonym folderze, takim jak Skrzynka odbiorcza. Poniższy przykład demonstruje, jak skonstruować MapiMessage i dodanie jej do skrzynki pocztowej.
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);
Wyślij wiadomości
Ten Wyślij metoda IGraphClient umożliwia wysyłanie wiadomości e‑mail bezpośrednio przy użyciu MapiMessage obiekt. W tym przykładzie tworzona jest prosta wiadomość, skonfigurowana ze szczegółami nadawcy i odbiorcy, a następnie wysyłana.
// 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);
Wyślij wiadomość szkicu
Możesz zapisać wiadomość w folderze Szkice i wysłać ją później przy użyciu IGraphClient. To podejście pozwala przygotować wiadomość, przejrzeć lub zmodyfikować ją przed wysłaniem, a następnie wydać, gdy będzie gotowa. Poniższy przykład kodu pokazuje, jak utworzyć e‑mail, dodać metadane, zapisać go jako szkic i później wysłać:
- Utwórz MapiMessage z tematem, treścią i odbiorcami.
- Ustaw szczegóły nadawcy przy użyciu właściwości wiadomości.
- Zapisz wiadomość w folderze Szkice przy użyciu CreateMessage.
- Wyślij szkic, przekazując jego ItemId do Send() metoda.
// 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);
Wyślij wiadomość EML
Użyj MailMessage klasy do tworzenia i wysyłania wiadomości w formacie EML. Poniższy przykład kodu pokazuje, jak utworzyć i wysłać wiadomość e‑mail przy użyciu 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);
Kopiuj wiadomości
Aby utworzyć duplikat istniejącej wiadomości e‑mail, użyj CopyMessage metoda IGraphClient interfejsu.
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
Przenieś wiadomości
Aby przenieść istniejącą wiadomość e‑mail z jej bieżącej lokalizacji do nowego folderu, użyj MoveMessage metoda IGraphClient interfejsu.
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
Zarządzanie załącznikami
Ten IGraphClient w Aspose.Email dla .NET umożliwia programową pracę z załącznikami e‑mail. Obejmuje to tworzenie, pobieranie, usuwanie i wymienianie załączników powiązanych z wiadomością. Poniższy przykład kodu demonstruje pełne zarządzanie cyklem życia załącznika dla wiadomości Outlook za pośrednictwem Microsoft Graph API przy użyciu Aspose.Email. Możesz dostosować zawartość i metadane załącznika według potrzeb.
// 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);