Asynchronní operace s e-maily s OAuth autentizací a klientem EWS

Asynchronní metoda pro získání OAuth tokenu

Na rozdíl od synchronních metod jsou asynchronní metody neblokující a umožňují provádět více požadavků současně. Asynchronní metody jsou pojmenovány s příponou Async.

POZNÁMKA: Asynchronní metody jsou k dispozici ve verzích cílících na .NET Core, .NET Framework 4.5 a novější.

Následující ukázka kódu definuje SomeAsyncTokenProvider třída, která implementuje IAsyncTokenProvider rozhraní. Třída implementuje GetAccessTokenAsync asynchronní metoda, která vrací Task typu OAuthToken. Tato metoda získá platný OAuthToken asynchronně.

private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
    public SomeAsyncTokenProvider( /*some parameters*/)
    {
        ...
    }

    public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
        CancellationToken cancellationToken = default)
    {
        //Some asynchronous code to get a valid OAuthToken
        ...
    }

    public void Dispose()
    {
        ...
    }
}

Asynchronní nastavení EWS klienta s OAuth ověřením

Další příklad kódu získává klienta Exchange Web Services (EWS) asynchronně pomocí OAuth ověřování. Kód provádí následující kroky:

  1. Vytváří nový CancellationToken objekt, který může být použit k zrušení asynchronních operací.
  2. Vytvoří instance SomeAsyncTokenProvider třída, která implementuje IAsyncTokenProvider rozhraní. Tato třída se používá jako parametr při vytváření nového OAuthNetworkCredential objektu.
  3. Nastaví URI poštovní schránky na koncový bod Exchange Web Services.
  4. Volá GetEwsClientAsync metoda třídy EWSClient třída s mailboxUri a OAuthNetworkCredential objekt jako parametry. Tato metoda vrací objekt Task, takže čeká na výsledek před pokračováním. The cancellationToken objekt je předán jako volitelný parametr do GetEwsClientAsync metoda.
//The cancellationToken can be used
var cancellationToken = new CancellationToken();

//Create IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*some parameters*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
    cancellationToken: cancellationToken);

Odesílání e‑mailových zpráv

Níže uvedený příklad kódu se pokouší odeslat e‑mailovou zprávu asynchronně. Kód provádí následující kroky:

  1. Vytváří nový MailMessage objekt s parametry zprávy.
  2. Volá SendAsync metoda třídy EWSClient objekt, přičemž MailMessage je předán jako parametr. Metoda je čekána, protože vrací objekt Task. cancellationToken objekt je předán jako volitelný parametr do SendAsync metoda.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

Načíst e-mailové zprávy

Pro asynchronní načtení e-mailové zprávy použijte následující ukázkový kód s kroky popsanými níže:

  1. Zavolejte FetchItemAsync metoda objektu EWSclient. Metoda přijímá dva parametry:

    • messageUri je řetězec představující URI zprávy k načtení
    • cancellationToken je volitelný parametr, který může být použit k zrušení asynchronní operace. Metoda vrací objekt Task, který se vyřeší na MapiMessage objektu, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
  2. Přiřaďte do fetched proměnná s výsledkem dokončeného Task, který je MapiMessage objekt obsahující načtená data zprávy.

       var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
    

Připojit e-mailové zprávy

Níže uvedený příklad kódu se pokouší asynchronně připojit e-mailové zprávy. Kód provádí následující kroky:

  1. Volá AppendMessagesAsync metoda EWSclient objekt. Metoda přijímá EwsAppendMessage objekt, který obsahuje parametry: zprávy k připojení, URI cílové složky a token pro zrušení.

  2. Vytváří EwsAppendMessage objekt pomocí Vytvořit metoda a konfiguruje ji následujícími voláními metod:

    • AddMessage přidává zprávu k operaci připojení.
    • SetFolder nastavuje URI cílové složky pro operaci připojení.
    • SetCancellationToken nastavuje token pro zrušení, který lze použít k zrušení asynchronní operace.
  3. The AppendMessagesAsync Metoda vrací objekt Task, který se vyřeší na objekt IEnumerable, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.

  4. The uris proměnná je přiřazena výsledku dokončeného Task, který je objekt IEnumerable obsahující URI připojených zpráv.

IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
    EwsAppendMessage.Create()
        .AddMessage(message)
        .AddMessage(fetched)
        .SetFolder(folderUri)
        .SetCancellationToken(cancellationToken));

Kopírovat položky

Níže uvedený ukázkový kód ukazuje, jak kopírovat položky a provádí následující kroky:

  1. Volá CopyItemAsync metoda EWSClient objekt. Metoda přijímá tři parametry:

    • messageUri je řetězec představující URI zprávy k kopírování
    • destinationFolderUri je řetězec představující URI cílové složky
    • cancellationToken je volitelný parametr, který může být použit k zrušení asynchronní operace.

    Metoda vrací objekt Task, který se vyřeší na řetězec, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.

  2. newItemUri proměnná je přiřazena výsledku dokončeného Task, který je řetězec obsahující URI nově vytvořené kopie zprávy.

string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);

Smazat položky

Níže uvedený kód se pokouší smazat e-mailovou zprávu asynchronně.

Volá DeleteItemAsync metoda objektu EWSClient. Metoda přijímá tři parametry:

  • newItemUri je řetězec představující URI položky k smazání
  • DeletionOptions.DeletePermanently určuje, že položka má být smazána trvale
  • cancellationToken je volitelný parametr, který může být použit k zrušení asynchronní operace.

Metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.

await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);

Smazat složky

Níže uvedený kód se pokouší smazat složku asynchronně.

Volá DeleteFolderAsync metoda objektu EWSClient. Metoda přijímá tři parametry:

  • folderUri je řetězec představující URI složky k smazání
  • deletePermanently určuje, zda složku smazat trvale nebo ji přesunout do složky "Deleted Items"
  • cancellationToken je volitelný parametr, který může být použit k zrušení asynchronní operace.

Metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.

const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);

Aktualizovat položky

Níže uvedený příklad kódu se snaží asynchronně aktualizovat položku. Provede následující kroky:

  1. Vytváří EwsUpdateItem objekt pomocí Vytvořit metoda, předávajíc objekt položky. EwsUpdateItem představuje parametry operace aktualizace. SetCancellationToken metoda je volána na EwsUpdateItem objekt, předávajíc cancellationToken parametr, který je volitelný a může být použit k zrušení asynchronní operace.
  2. Předává EwsUpdateItem objekt jako parametr pro UpdateItemAsync metoda EWSClient.
  3. The UpdateItemAsync metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));