OAuth Kimlik Doğrulaması ve EWS İstemcisi ile Asenkron E-posta İşlemleri

OAuth Token Getirmek için Asenkron Yöntem

Senkron yöntemlerin aksine, asenkron yöntemler engellemeyecek şekilde çalışır ve aynı anda birden fazla isteği gerçekleştirmeye izin verir. Asenkron yöntemlerin adı Async soneki ile biter.

NOT: Asenkron yöntemler .NET Core, .NET Framework 4.5 ve sonraki sürümleri hedefleyen versiyonlarda mevcuttur.

Aşağıdaki kod örneği bir tanımlıyor SomeAsyncTokenProvider sınıf, bu ise şunu uygular IAsyncTokenProvider arayüz. Sınıf şu şeyi uygular GetAccessTokenAsync OAuthToken türünde bir Task döndüren asenkron yöntem. Bu yöntem geçerli bir OAuthToken eşzamanlı olarak.

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()
    {
        ...
    }
}

OAuth Kimlik Doğrulamasıyla Asenkron EWS İstemci Ayarı

Sonraki kod örneği, OAuth kimlik doğrulaması kullanarak Exchange Web Services (EWS) istemcisini eşzamanlı olarak elde eder. Kod şu adımları gerçekleştirir:

  1. Yeni bir … oluşturur CancellationToken eşzamanlı işlemleri iptal etmek için kullanılabilecek nesne.
  2. Örnek oluşturur SomeAsyncTokenProvider arayüzü uygulayan sınıf IAsyncTokenProvider arayüz. Bu sınıf yeni bir oluşturmak için parametre olarak kullanılır OAuthNetworkCredential nesne.
  3. Posta kutusu URI’sını Exchange Web Services uç noktasına ayarlar.
  4. Çağırır GetEwsClientAsync metodu EWSClient sınıf şu ile mailboxUri ve OAuthNetworkCredential parametre olarak nesne. Bu yöntem bir Task nesnesi döndürür, bu yüzden devam etmeden önce sonucu bekler. The cancellationToken nesne, …‘a isteğe bağlı bir parametre olarak geçilir GetEwsClientAsync metod.
//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);

E-posta Mesajları Gönder

Aşağıdaki kod örneği bir e-posta mesajını eşzamanlı olarak göndermeye çalışmaktadır. Kod şu adımları gerçekleştirir:

  1. Yeni bir … oluşturur MailMessage mesaj parametreleriyle nesne.
  2. Çağırır SendAsync metodu EWSClient nesne, MailMessage’ı parametre olarak geçirir. Yöntem bir Task nesnesi döndürdüğü için await yapılır. cancellationToken nesne, …‘a isteğe bağlı bir parametre olarak geçilir SendAsync metod.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

E-posta Mesajlarını Çek

Asenkron olarak bir e-posta mesajını çekmek için, aşağıdaki kod örneğini ve aşağıda açıklanan adımları kullanın:

  1. Şuğu çağırın FetchItemAsync EWSclient’ın bir yöntemi. Yöntem iki parametre alır:

    • messageUri çekilecek mesajın URI’sını temsil eden bir dizedir
    • cancellationToken asenkron işlemi iptal etmek için kullanılabilen isteğe bağlı bir parametredir. Yöntem, şuna dönüşen bir Task nesnesi döndürür: MapiMessage asenkron işlem tamamlandığında nesneye. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.
  2. Ata fetched değişken, tamamlanan Task’in sonucudur; bu bir MapiMessage çekilen mesaj verilerini içeren nesne.

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

E-posta Mesajları Ekle

Aşağıdaki kod örneği e-posta mesajlarını asenkron olarak eklemeye çalışmaktadır. Kod aşağıdaki adımları gerçekleştirir:

  1. Çağırır AppendMessagesAsync bir yöntemi EWSclient nesnesi. Yöntem bir … alır EwsAppendMessage parametreleri içeren nesne: eklenecek mesajlar, hedef klasör URI’sı ve iptal token’ı.

  2. Oluşturur EwsAppendMessage nesnesi … kullanarak Oluştur yöntemi ve aşağıdaki yöntem çağrılarıyla yapılandırır:

    • AddMessage ekleme işlemine bir mesaj ekler.
    • SetFolder ekleme işlemi için hedef klasör URI’sını ayarlar.
    • SetCancellationToken asenkron işlemi iptal etmek için kullanılabilen iptal token’ını ayarlar.
  3. Bu AppendMessagesAsync yöntem, asenkron işlem tamamlandığında bir IEnumerable nesnesine dönüşen bir Task nesnesi döndürür. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.

  4. Bu uris değişken, tamamlanan Task’in sonucuna atanır; bu, eklenen mesajların URI’larını içeren bir IEnumerable nesnesidir.

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

Öğeleri Kopyala

Aşağıdaki kod örneği öğeleri kopyalamanın nasıl yapılacağını gösterir ve aşağıdaki adımları gerçekleştirir:

  1. Çağırır CopyItemAsync bir yöntemi EWSClient nesnesi. Yöntem üç parametre alır:

    • messageUri kopyalanacak mesajın URI’sını temsil eden bir dizedir
    • destinationFolderUri hedef klasörün URI’sını temsil eden bir dizedir
    • cancellationToken asenkron işlemi iptal etmek için kullanılabilen isteğe bağlı bir parametredir.

    Yöntem, asenkron işlem tamamlandığında bir dizeye dönüşen bir Task nesnesi döndürür. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.

  2. newItemUri değişken, tamamlanan Task’in sonucuna atanır; bu, mesajın yeni oluşturulan kopyasının URI’sını içeren bir dizedir.

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

Öğeleri Sil

Aşağıdaki kod bir e-posta mesajını asenkron olarak silmeye çalışmaktadır.

Çağırır DeleteItemAsync EWSClient nesnesinin bir yöntemi. Yöntem üç parametre alır:

  • newItemUri silinecek öğenin URI’sını temsil eden bir dizedir
  • DeletionOptions.DeletePermanently öğenin kalıcı olarak silinmesi gerektiğini belirtir
  • cancellationToken asenkron işlemi iptal etmek için kullanılabilen isteğe bağlı bir parametredir.

Yöntem, asenkron işlem tamamlandığında sonuçlanan bir Task nesnesi döndürür. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.

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

Klasörleri Sil

Aşağıdaki kod bir klasörü asenkron olarak silmeye çalışmaktadır.

Çağırır DeleteFolderAsync EWSClient nesnesinin bir yöntemi. Yöntem üç parametre alır:

  • folderUri silinecek klasörün URI’sını temsil eden bir dizedir
  • deletePermanently klasörün kalıcı olarak silinip silinmeyeceğini veya "Silinen Öğeler" klasörüne taşınacağını belirtir
  • cancellationToken asenkron işlemi iptal etmek için kullanılabilen isteğe bağlı bir parametredir.

Yöntem, asenkron işlem tamamlandığında sonuçlanan bir Task nesnesi döndürür. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.

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

Öğeleri Güncelle

Aşağıdaki kod örneği bir öğeyi asenkron olarak güncellemeye çalışmaktadır. Aşağıdaki adımları gerçekleştirir:

  1. Bir … oluşturur EwsUpdateItem nesnesi … kullanarak Oluştur yöntem, bir öğe nesnesi geçirir. EwsUpdateItem, bir güncelleme işlemi parametrelerini temsil eder. SetCancellationToken yöntem, … üzerinde çağrılır EwsUpdateItem nesne, içinde geçirerek cancellationToken parametre, asenkron işlemi iptal etmek için kullanılabilen isteğe bağlı bir parametredir.
  2. Geçirir EwsUpdateItem nesneyi parametre olarak UpdateItemAsync bir yöntemi EWSClient.
  3. Bu UpdateItemAsync metod, asenkron işlem tamamlandığında sonuçlanan bir Task nesnesi döndürür. "await" anahtar kelimesi, devam etmeden önce Task nesnesinin tamamlanmasını beklemek için kullanılır.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));