Microsoft Graph pro správu poštovních schránek v C#

Integrace Microsoft Graph API a knihovny Aspose.Email pro .NET s e-mailovou aplikací umožňuje vývojářům snadno přistupovat a manipulovat s daty poštovních schránek, provádět operace jako vyhledávání zpráv, získávání hierarchií složek a ukládání e-mailů v různých formátech. V tomto článku prozkoumáme, jak využít tuto mocnou kombinaci při zpracování a správě poštovních schránek.

Prezentace Microsoft Graph

Microsoft Graph je komplexní platforma API poskytovaná společností Microsoft, která nabízí jednotný koncový bod pro přístup k široké škále služeb a dat Microsoftu. Slouží jako brána k rozsáhlým datům dostupným v Microsoft 365, včetně poštovních schránek Outlook, kalendářů, kontaktů, OneDrive, Teams a další.

S Microsoft Graph mohou vývojáři vytvářet aplikace, které bezproblémově interagují s uživatelskými daty a poznatky napříč cloudovým ekosystémem Microsoft. Toho je dosaženo prostřednictvím RESTful API a SDK, které poskytují prostředky k autentizaci, autorizaci a dotazování na data s lehkostí.

O knihovně Aspose.Email pro .NET

Aspose.Email pro .NET je bohatá knihovna, která umožňuje vývojářům pracovat s e-mailovými soubory a protokoly ve svých aplikacích .NET. Poskytuje robustní sadu API pro vytváření, manipulaci a převod e-mailových zpráv v různých formátech, jako jsou MSG, EML a MBOX. Kromě toho knihovna podporuje e-mailové protokoly jako SMTP, POP3 a IMAP, což umožňuje všestrannou správu e-mailů.

V této příručce použijeme Aspose.Email k interakci s Microsoft Graph, programově zpracovávajícími data poštovních schránek. S GraphClient od Aspose.Email můžeme efektivně provádět operace s poštovními schránkami autentizací s Microsoft Graph.

Chcete-li začít využívat knihovnu, musíte ji integrovat do svého projektu. Nejjednodušší způsob, jak získat Aspose.Email pro .NET, je prostřednictvím správce balíčků NuGet:

  • Otevřete svůj projekt ve Visual Studio.
  • Přejděte na Nástroje > Správce balíčků NuGet > Spravovat balíčky NuGet pro řešení.
  • Hledejte Aspose.Email.
  • Vyberte balíček a klikněte na Instalovat.

Alternativně můžete použít konzolu pro správce balíčků:

Install-Package Aspose.Email

Také si můžete stáhnout nejnovější verzi API přímo z webu Aspose webu.

Konfigurace vaší aplikace na Azure Portalu

Než se pustíme do kódu, je nezbytné nakonfigurovat vaši aplikaci v Azure portálu pro povolení přístupu k Microsoft Graph. Stačí se řídit těmito kroky:

  1. Vytvoření aplikace Azure Active Directory (AAD):

    • Přejděte na Azure Portal.
    • Přejděte na Azure Active Directory > Registrace aplikací.
    • Klikněte na Nová registrace pro vytvoření nové aplikace.
    • Zadejte název a nastavte URI pro přesměrování, pokud je to potřeba.
    • Klikněte na Registrovat, abyste dokončili proces.
  2. Nastavení oprávnění API:

    • Ve vaší registrované aplikaci přejděte na Oprávnění API.
    • Klikněte na Přidat oprávnění > Microsoft Graph.
    • Vyberte Oprávnění aplikace pro serverové volání.
    • Zvolte potřebná oprávnění jako Mail.Read, Mail.ReadWrite, User.Read atd.
    • Klikněte na Přidat oprávnění, abyste je použili.
  3. Vytvoření tajného klíče klienta:

    • Přejděte na Certifikáty a tajné klíče ve vaší aplikaci.
    • Klikněte na Nový tajný klíč klienta a zadejte popis.
    • Nastavte dobu platnosti, poté klikněte na Přidat.
    • Poznamenejte si vygenerovanou hodnotu tajného klíče klienta, protože ji budete potřebovat později.
  4. Shromáždění konfiguračních hodnot:

    • Získejte ID nájemce, ID klienta a Tajný klíč klienta z přehledové stránky vaší aplikace a sekce s tajným klíčem.
    • Tyto hodnoty použijete k autentizaci a interakci s Microsoft Graph.

Jakmile je vaše aplikace nakonfigurována, jste připraveni pokračovat v vývojových úlohách.

Získání přístupového tokenu a inicializace GraphClient

Než se pustíme do operací s poštovními schránkami, musíme odemknout dveře do rozsáhlého ekosystému dat a služeb Microsoft Graph. Tento přístup je povolen prostřednictvím přístupového tokenu OAuth 2.0 - digitálního klíče, který autorizuje vaši aplikaci k interakci s Microsoft Graph jménem uživatele nebo služby. Představte si to jako zabezpečený průkaz, který vám umožní vstoupit do celého vesmíru možností, od získávání e-mailů po správu kontaktů a další.

Krok 1: Nastavení konfiguračního souboru

Prvním krokem k získání tokenu je nastavení konfiguračního souboru, který ukládá základní údaje, jako je ID nájemce, ID klienta a Tajný klíč klienta vaší aplikace. Tyto hodnoty jsou přihlašovací údaje vaší aplikace a fungují jako identifikátory při komunikaci se servery Microsoftu.

Zde je, jak by mohl váš JSON konfigurační soubor vypadat:

{
    "Instance": "https://login.microsoftonline.com/{0}",
    "ApiUrl": "https://graph.microsoft.com/.default",
    "TenantId": "VLOŽTE_ID_NÁJEMCE_TADY",
    "ClientId": "VLOŽTE_ID_APLIKACE_TADY",
    "ClientSecret": "VLOŽTE_TAJNÝ_KLÍČ_KLIENTA_TADY",
    "UserId": "VLOŽTE_ID_TADY"
}

Krok 2: Mapování JSON konfigurace na C# objekt

Nyní převedeme tuto konfiguraci na C# objekt, který naše aplikace může používat. Přečteme JSON soubor a mapujeme jeho obsah na třídu AuthenticationConfig, čímž zajistíme, že naše aplikace ví, kde najít důležité informace, které potřebuje.

class AuthenticationConfig
{
    public string Instance { get; set; }
    public string ApiUrl { get; set; }
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string UserId { get; set; }
    public string Authority => string.Format(CultureInfo.InvariantCulture, Instance, TenantId);
    public string ClientSecret { get; set; }
    
    public static AuthenticationConfig ReadFromJsonFile(string path)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path);

        var configuration = builder.Build();
        return configuration.Get<AuthenticationConfig>();
    }
}

Krok 3: Získání přístupového tokenu

S naší konfigurací na místě je čas získat přístupový token. Implementujeme třídu GraphTokenProvider, která zpracovává proces autentizace pomocí Microsoft Authentication Library (MSAL). Tato třída se postará o těžkou práci - komunikaci s Microsoft Graph za účelem získání tokenu, který posiluje naši aplikaci.

class GraphTokenProvider : ITokenProvider
{
    private readonly IConfidentialClientApplication _app;
    private readonly string[] _scopes;
    private string? _token;
    
    public GraphTokenProvider(AuthenticationConfig config)
    {
        _app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
            .WithClientSecret(config.ClientSecret)
            .WithAuthority(config.Authority)
            .Build();

        // In-memory token caches (App and User caches)
        _app.AddInMemoryTokenCache();
        
        _scopes = new[] { config.ApiUrl }; 
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public OAuthToken GetAccessToken()
    {
        return GetAccessToken(false);
    }

    public OAuthToken GetAccessToken(bool ignoreExistingToken)
    {
        if (!ignoreExistingToken && _token != null)
        {
            return new OAuthToken(_token);
        }

        _token = GetAccessTokenAsync().GetAwaiter().GetResult();
        return new OAuthToken(_token);
    }
    
    private async Task<string?> GetAccessTokenAsync()
    {
        AuthenticationResult? result;
        
        try
        {
            result = await _app.AcquireTokenForClient(_scopes)
                .ExecuteAsync();
            
            Console.WriteLine($"Token získaný z {result.AuthenticationResultMetadata.TokenSource} {Environment.NewLine}");
        }
        catch (MsalServiceException ex)
        {
            Console.WriteLine($"Chyba při získávání tokenu:{Environment.NewLine}{ex}{Environment.NewLine}");
            result = null;
        }

        if (result == null) return null;
        _token = result.AccessToken;
        return result.AccessToken;
    }
}

Krok 4: Inicializace GraphClient

Nakonec inicializujeme GraphClient pomocí tokenu, který jsme získali. GraphClient funguje jako náš most k Microsoft Graph, což nám umožňuje bezproblémově interagovat s uživatelskými poštovními schránkami.

var config = AuthenticationConfig.ReadFromJsonFile("appsettings.json");
var tokenProvider = new GraphTokenProvider(config);

using var client = GraphClient.GetClient(tokenProvider, config.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = config.UserId;

Získání hierarchie složek a získání složek podle názvu

Jakmile máte přístup k Microsoft Graph, je čas se pustit do prozkoumání poštovní schránky. V této části se zaměříme na získání a navigaci hierarchií složek poštovní schránky, což vám umožní přistupovat k konkrétním složkám podle názvu.

Krok 1: Porozumění hierarchii složek

Poštovní schránky jsou strukturovány hierarchicky, podobně jako strom. Kořenová složka se větví do několika podložek, z nichž každá obsahuje svůj vlastní soubor e-mailů a potenciálně další podložky. Tato vnořená struktura umožňuje organizované řízení a snadnou navigaci e-mailů.

Definujme a použijme třídu FolderNode, která představuje každou složku v hierarchii:

// Reprezentuje uzel v hierarchii složek,
// rozšiřuje vlastnosti FolderInfo a ukládá kolekci podložek.
class FolderNode
{
    // Získává objekt FolderInfo představující informace o složce.
    public FolderInfo Folder { get; }
    
    // Získává kolekci podložek obsažených v aktuální složce.
    public List<FolderNode?> SubFolders { get; }

    // Inicializuje novou instanci třídy FolderNode se zadaným objektem FolderInfo.
    public FolderNode(FolderInfo folder)
    {
        Folder = folder;
        SubFolders = new List<FolderNode?>();
    }
    
    // Tiskne všechny složky hierarchickým způsobem, počínaje aktuálním uzlem.
    public void PrintHierarchy()
    {
        PrintFolderNode(this, 0);
    }

    private void PrintFolderNode(FolderNode node, int indentLevel)
    {
        // Tisk aktuálního uzlu složky s odsazením
        Console.WriteLine($"{new string(' ', indentLevel * 2)}{node}");

        // Rekurzivní tisk podložek
        foreach (var subFolder in node.SubFolders)
        {
            PrintFolderNode(subFolder, indentLevel + 1);
        }
    }

    // Získá název složky.
    public override string ToString()
    {
        return $"{Folder.DisplayName} ({Folder.ContentCount})";
    }
}

Pro získání celé hierarchie složek vytvoříme třídu FolderHierarchy, která využívá GraphClient k seznamu všech složek rekurzivně. Zde je, jak to funguje:

static class FolderHierarchy
{
    // Získává všechny složky v poštovní schránce rekurzivně a vrací hierarchickou kolekci objektů FolderNode.
    public static List<FolderNode> Retrieve(IGraphClient client)
    {
        // Získání kořenových složek
        var rootFolders = client.ListFolders();
        var allFolders = new List<FolderNode>();

        // Získání podložek rekurzivně
        foreach (var folder in rootFolders)
        {
            var folderNode = new FolderNode(folder);
            RetrieveSubFolders(client, folderNode);
            allFolders.Add(folderNode);
        }

        return allFolders;
    }

    // Získává podložky rekurzivně a přidává je do vlastnosti SubFolders nadřazeného uzlu FolderNode.
    private static void RetrieveSubFolders(IGraphClient client, FolderNode parentFolderNode)
    {
        if (parentFolderNode.Folder.HasSubFolders)
        {
            var subFolders = client.ListFolders(parentFolderNode.Folder.ItemId);
            
            foreach (var subFolder in subFolders)
            {
                var subFolderNode = new FolderNode(subFolder);
                RetrieveSubFolders(client, subFolderNode);
                parentFolderNode.SubFolders.Add(subFolderNode);
            }
        }
    }
}

Krok 2: Získání hierarchie složek

Pomocí metody FolderHierarchy.Retrieve můžete snadno procházet poštovní schránku a odhalit její strukturu složek. Zde je, jak to můžete udělat:

// Získání hierarchie složek z poštovní schránky
var folderNodes = FolderHierarchy.Retrieve(client);

// Tisk hierarchie složek ve strukturovaném formátu
foreach (var folderNode in folderNodes)
{
    folderNode.PrintHierarchy();
}

Krok 3: Získání složek podle názvu

Jakmile je hierarchie složek získána, můžete rychle najít konkrétní složky podle názvu. Ať už máte zájem o přístup k Doručené poště nebo jakékoli vlastní složce, tato metoda zajišťuje, že je můžete rychle lokalizovat:

// Určete název složky, kterou hledáte
string targetFolderName = "Doručená pošta";

// Najděte cílovou složku podle názvu
var targetFolder = folderNodes.FirstOrDefault(
    folderNode => folderNode.Folder.DisplayName.Equals(targetFolderName, StringComparison.OrdinalIgnoreCase))
    ?.Folder;

Seznam zpráv ve specifikované složce

S úspěšně získanou hierarchií složek je dalším krokem ponořit se do obsahu konkrétních složek. Představte si, že jste se dostali do Doručené pošty; nyní chcete zobrazit všechny zprávy, které obsahuje.

V této části prozkoumáme, jak vypsat zprávy v rámci konkrétní složky pomocí GraphClient a Aspose.Email pro .NET.

Jakmile máte složku, výpis zpráv v ní je jednoduchý. GraphClient poskytuje metodu ListMessages pro získání všech zpráv ve složce, které můžete poté zpracovat nebo zobrazit.

Zde je kód pro seznam zpráv ze specifikované složky:

Console.WriteLine("Výpis zpráv ve specifikované složce...");

// Zavolejte metodu klienta pro seznam zpráv ve vybrané složce
var messageInfoCollection = client.ListMessages(targetFolder.ItemId);

Console.WriteLine($"{targetFolderName}:");

// Vytiskněte předmět zpráv
foreach (var messageInfo in messageInfoCollection)
{
    Console.WriteLine($"     - {messageInfo.Subject}");
}

Kolekce messageInfoCollection obsahuje důležité informace o každém e-mailu. Tyto informace mohou být využity k zobrazení shrnutí, generování zpráv nebo dokonce spouštění upozornění na základě specifických kritérií.

Závěr

V tomto článku jsme prozkoumali, jak využít sílu Microsoft Graph a knihovny Aspose.Email pro .NET k efektivnímu zpracování poštovních schránek, navigaci hierarchií složek a seznamu zpráv v konkrétních složkách. Dodržováním těchto kroků můžete vybudovat robustní aplikace, které bezproblémově interagují s e-mailovými daty, poskytují vylepšenou funkčnost a uživatelské zkušenosti.

Koncepty v akci

Pokud se těšíte na to, jak tyto koncepty uvést do praxe, můžete si stáhnout plně funkční příklad aplikace. Tato aplikace zahrnuje zdrojový kód popsaný v tomto článku a ukazuje, jak tyto funkce implementovat krok za krokem.

Navštivte naše repozitář GitHub, abyste získali vzorovou aplikaci: Aspose.Email pro .NET - Příklad GraphApp.

Zpracování poštovních schránek prostřednictvím Microsoft Graph nabízí bezprecedentní přístup k datům e-mailů a schopnost správy. S těmi správnými nástroji a technikami můžete vytvářet sofistikované aplikace, které poskytují smysluplné poznatky a automatizují složité úkoly, čímž nakonec zvyšují produktivitu a spokojenost uživatelů.

Vyzkoušejte to zdarma

Kromě toho Aspose.Email poskytuje komplexní dokumentaci, rozsáhlou API referenci a různé bezplatné online nástroje a aplikace pro vylepšení vašeho vývojového procesu. Vývojáři mají také přístup k bezplatnému podpornému fóru pro komunitní pomoc a poznatky a mohou se sledovat nejnovější tipy a návody prostřednictvím blogu Aspose blogu.

Další informace