Spravujte e‑mailové zprávy a přílohy pomocí Microsoft Graph
Aspose.Email IGraphClient poskytuje širokou škálu metod pro správu e-mailových zpráv a jejich příloh prostřednictvím Microsoft Graph.
Dostupné operace:
-
Vypsat zprávy
-
Filtrovat a stránkovat zprávy
-
Načíst obsah zprávy
-
Vytvářet a odesílat zprávy (včetně konceptů a EML)
-
Kopírovat a přesouvat zprávy
-
Spravovat přílohy (vytvářet, načítat, mazat, zobrazovat seznam)
- List zprávy
- Načíst zpráva
- Vytvořit zpráva
- Odeslat zpráva
- CopyMessage zpráva
- Přesunout zpráva
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
Vypsat zprávy
Pro získání zpráv ze složky, např. "Doručená pošta", použijte ListMessages metoda.
- Získat seznam složek pomocí client.ListFolders().
- Procházejte každou složku.
- Zkontrolujte, zda je zobrazovaný název složky "Inbox".
- Pokud ano, vylistujte zprávy v Došlých pomocí client.ListMessages(folder.ItemId).
- Projděte každou zprávu v Došlých.
- Vytiskněte předmět každé zprávy do konzole.
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);
}
}
}
Asynchronně vypsat zprávy pomocí Microsoft Graph
Následující ukázkový kód demonstruje, jak získat přístup ke složce Došlé, načíst stránku e‑mailových zpráv s ListMessagesAsync, a vytiskněte jejich předměty:
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);
}
Filtrovat zprávy podle data odeslání
The OrderBy metoda ze sbírky knihovny umožňuje načíst zprávy s různým řazením (vzestupně i sestupně) podle data odeslání. Následující ukázkový kód ukazuje, jak seřadit zprávy podle data odeslání:
-
Inicializujte Graph Client
- Vytvořte instanci IGraphClient použitím GraphClient.GetClient() s poskytovatelem a TenantId.
-
Vytvořit Query Builder
- Vytvořte instanci GraphQueryBuilder objektu.
-
Seřadit zprávy podle data v:
-
Sestupné pořadí
- Použijte
builder.SentDate.OrderBy(false)pro nastavení pořadí na sestupné. - Zavolejte client.ListMessages() pro získání zpráv z Došlých s limitem 10, pomocí dotazu z builder.GetQuery().
- Uložte načtené zprávy do proměnné messages.
- Použijte
-
Vzestupné pořadí
- Nastavte pořadí na vzestupné zavoláním
builder.SentDate.OrderBy(true). - Použijte client.ListMessages() znovu načíst zprávy z Došlých, nyní ve vzestupném pořadí.
- Uložte tyto zprávy do proměnné messages.
- Nastavte pořadí na vzestupné zavoláním
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;
Vypsat zprávy s stránkováním a filtrováním
Používejte stránkování při práci s velkými poštovními schránkami. Níže uvedený příklad načte nepřečtené zprávy po 10 na stránku a po zpracování je označí jako přečtené:
- Inicializujte klienta.
- Nastavte počet položek k zobrazení na stránku, například 10.
- Vytvořte filtr pro načtení pouze nepřečtených zpráv pomocí GraphQueryBuilder třída. The
builder.IsRead.Equals(false)nastavuje podmínku pro filtrování nepřečtených zpráv. - Zavolejte ListMessages metoda na objektu klienta, která jako parametry určuje složku (Inbox) a počet položek na stránku (PageInfo(itemsPerPage)). Také předává objekt dotazu pro aplikaci filtru nepřečtených zpráv. Vrácený objekt PageInfo (pageInfo) obsahuje načtené zprávy pro aktuální stránku ve vlastnosti Items.
- Vytvořte smyčku, která pokračuje, dokud není dosaženo poslední stránky (pageInfo.LastPage je false). Načtené zprávy jsou přidány do existujícího seznamu zpráv pomocí
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);
}
Načíst zprávu
Načtěte úplný obsah konkrétní zprávy. Následující ukázkový kód demonstruje, jak načíst a zobrazit nejnovější zprávu v Došlých pro zobrazení nebo zpracování:
- Zavolejte client.ListFolders() pro načtení všech dostupných složek v poštovní schránce a uložení do proměnné folders.
- Procházejte každou složku ve sbírce složek pomocí smyčky foreach.
- Uvnitř cyklu zkontrolujte, zda se zobrazovaný název složky rovná "Inbox".
- Pokud je složka Došlé, načtěte zprávy pomocí client.ListMessages() s ItemId složky.
- Zkontrolujte, zda jsou ve schránce nějaké zprávy, ověřením, že počet inboxMessages.Count je větší než 0.
- Pokud jsou zprávy, načtěte první zprávu pomocí client.FetchMessage() s ItemId první zprávy.
- Vypište HTML tělo načtené zprávy.
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);
}
}
}
Microsoft Graph dotazy s OData
Aspose.Email pro .NET poskytuje OData podporu dotazů pro Microsoft Graph. To umožňuje vývojářům použít pokročilé filtrování, řazení, výběr, stránkování a rozšíření při práci s prostředky Graphu, jako jsou složky, zprávy, kontakty, položky kalendáře a další. Aspose.Email.Clients.Graph.ODataQueryBuilder třída je vytvořena pro sestavování OData dotazových parametrů strukturovaným způsobem místo ručního sestavování řetězců dotazů. Tím můžete načíst pouze potřebná pole (Select) pro efektivitu, použijte filtrování (Filter) a řazení (OrderBy) pro organizaci dat. Můžete také implementovat stránkování (Top, Skip) pro velké datové sady, rozšířit související entity (Expand) v jednom volání a umožňuje počítání a fulltextové vyhledávání pro pokročilé scénáře.
Níže je seznam GraphClient metody, které podporují volitelný ODataQueryBuilder parametr:
ListFoldersListMessagesListContactsListCalendarItemsListAttachmentsListCategoriesListOverridesListRulesListTaskListsListTasksListNotebooks
Následující ukázkový kód demonstruje, jak použít ODataQueryBuilder pro výpis složek a načtení filtrovaných, řazených a stránkovaných e‑mailových zpráv z poštovní schránky:**
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);
}
Vytvořit zprávu
Použijte CreateMessage metodu pro uložení nové zprávy přímo do konkrétní složky, například Došlé. Následující příklad ukazuje, jak vytvořit MapiMessage a přidat ji do poštovní schránky.
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);
Odeslat zprávy
The Odeslat metoda IGraphClient umožňuje vám odeslat e‑mailovou zprávu přímo pomocí MapiMessage objekt. V tomto příkladu je vytvořena jednoduchá zpráva, nakonfigurována s podrobnostmi o odesílateli a příjemcích a poté odeslána.
// 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);
Odeslat koncept zprávy
Můžete uložit zprávu do složky Koncepty a později ji odeslat pomocí IGraphClient. Tento přístup vám umožňuje připravit zprávu, zkontrolovat nebo upravit ji před odesláním a poté ji odeslat, až budete připraveni. Následující ukázkový kód demonstruje, jak vytvořit e‑mail, přidat metadata, uložit jej jako koncept a následně jej odeslat:
- Vytvořte MapiMessage s předmětem, tělem a příjemci.
- Nastavte podrobnosti o odesílateli pomocí vlastností zprávy.
- Uložte zprávu do složky Koncepty pomocí CreateMessage.
- Odešlete koncept předáním jeho 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);
Odeslat EML zprávu
Použijte MailMessage třídu pro vytvoření a odeslání zpráv ve formátu EML. Následující ukázkový kód demonstruje, jak vytvořit a odeslat e‑mailovou zprávu pomocí 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);
Kopírovat zprávy
Pro vytvoření duplikátu existující e‑mailové zprávy použijte CopyMessage metoda třídy IGraphClient rozhraní.
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
Přesunout zprávy
Pro přesunutí existující e‑mailové zprávy z jejího aktuálního umístění do nové složky použijte MoveMessage metoda třídy IGraphClient rozhraní.
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
Správa příloh
The IGraphClient v Aspose.Email pro .NET vám umožňuje programově pracovat s e‑mailovými přílohami. To zahrnuje vytváření, načítání, mazání a výpis příloh spojených se zprávou. Následující ukázkový kód demonstruje úplnou správu životního cyklu příloh pro Outlook zprávy prostřednictvím Microsoft Graph API pomocí Aspose.Email. Obsah a metadata přílohy můžete upravit podle potřeby.
// 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);