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)

Vypsat zprávy

Pro získání zpráv ze složky, např. "Doručená pošta", použijte ListMessages metoda.

  1. Získat seznam složek pomocí client.ListFolders().
  2. Procházejte každou složku.
  3. Zkontrolujte, zda je zobrazovaný název složky "Inbox".
  4. Pokud ano, vylistujte zprávy v Došlých pomocí client.ListMessages(folder.ItemId).
  5. Projděte každou zprávu v Došlých.
  6. 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í:

  1. Inicializujte Graph Client

  2. Vytvořit Query Builder

  3. 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.
  • 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.
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é:

  1. Inicializujte klienta.
  2. Nastavte počet položek k zobrazení na stránku, například 10.
  3. 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.
  4. 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.
  5. 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í:

  1. Zavolejte client.ListFolders() pro načtení všech dostupných složek v poštovní schránce a uložení do proměnné folders.
  2. Procházejte každou složku ve sbírce složek pomocí smyčky foreach.
  3. Uvnitř cyklu zkontrolujte, zda se zobrazovaný název složky rovná "Inbox".
  4. Pokud je složka Došlé, načtěte zprávy pomocí client.ListMessages() s ItemId složky.
  5. Zkontrolujte, zda jsou ve schránce nějaké zprávy, ověřením, že počet inboxMessages.Count je větší než 0.
  6. Pokud jsou zprávy, načtěte první zprávu pomocí client.FetchMessage() s ItemId první zprávy.
  7. 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:

  • ListFolders
  • ListMessages
  • ListContacts
  • ListCalendarItems
  • ListAttachments
  • ListCategories
  • ListOverrides
  • ListRules
  • ListTaskLists
  • ListTasks
  • ListNotebooks

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:

  1. Vytvořte MapiMessage s předmětem, tělem a příjemci.
  2. Nastavte podrobnosti o odesílateli pomocí vlastností zprávy.
  3. Uložte zprávu do složky Koncepty pomocí CreateMessage.
  4. 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);