OAuth 인증 및 EWS 클라이언트를 이용한 비동기 이메일 작업

OAuth 토큰을 가져오는 비동기 메서드

동기 메서드와 달리 비동기 메서드는 차단되지 않으며 동시에 여러 요청을 수행할 수 있습니다. 비동기 메서드의 이름은 Async 접미사가 붙습니다.

NOTE: 비동기 메서드는 .NET Core, .NET Framework 4.5 및 이후 버전을 대상으로 사용할 수 있습니다.

다음 코드 샘플은 SomeAsyncTokenProvider 클래스이며, 다음을 구현합니다 IAsyncTokenProvider 인터페이스. 이 클래스는 구현합니다 GetAccessTokenAsync OAuthToken 타입의 Task를 반환하는 비동기 메서드입니다. 이 메서드는 유효한 OAuthToken 비동기적으로.

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 인증을 사용한 비동기 EWS 클라이언트 설정

다음 코드 예제는 OAuth 인증을 사용하여 Exchange Web Services (EWS) 클라이언트를 비동기로 얻습니다. 코드는 다음 단계들을 수행합니다:

  1. 새로 생성합니다 CancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 객체.
  2. 인스턴스화합니다 SomeAsyncTokenProvider 인터페이스를 구현하는 클래스 IAsyncTokenProvider 인터페이스. 이 클래스는 새로운 객체를 생성하기 위한 매개변수로 사용됩니다. OAuthNetworkCredential 객체.
  3. 메일박스 URI를 Exchange Web Services 엔드포인트에 설정합니다.
  4. 다음 메서드를 호출합니다 GetEwsClientAsync 메서드 EWSClient 클래스와 함께 mailboxUriOAuthNetworkCredential object를 매개변수로 사용합니다. 이 메서드는 Task 객체를 반환하므로, 계속 진행하기 전에 결과를 await합니다. The cancellationToken 객체가 선택적 매개변수로 전달됩니다 GetEwsClientAsync 메서드.
//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);

이메일 메시지 보내기

아래 코드 예제는 이메일 메시지를 비동기로 전송하려고 합니다. 코드는 다음 단계들을 수행합니다:

  1. 새로 생성합니다 MailMessage 메시지 매개변수를 가진 객체.
  2. 다음 메서드를 호출합니다 SendAsync 메서드 EWSClient 객체에 MailMessage를 매개변수로 전달합니다. 메서드는 Task 객체를 반환하므로 await됩니다. cancellationToken 객체가 선택적 매개변수로 전달됩니다 SendAsync 메서드.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

이메일 메시지 가져오기

이메일 메시지를 비동기적으로 가져오려면 아래 단계와 함께 다음 코드 예제를 사용하십시오:

  1. 다음을 호출합니다. FetchItemAsync EWSclient의 메서드이며, 두 개의 매개변수를 받습니다:

    • messageUri 가져올 메시지의 URI를 나타내는 문자열입니다.
    • cancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다. 메서드는 다음을 반환하는 Task 객체를 반환합니다: MapiMessage 비동기 작업이 완료될 때 객체에. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.
  2. 다음에 할당합니다 fetched 변수에 완료된 Task의 결과가 할당되며, 이는 MapiMessage 가져온 메시지 데이터를 포함하는 객체.

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

이메일 메시지 추가

아래 코드 예제는 이메일 메시지를 비동기적으로 추가하려고 시도합니다. 코드는 다음 단계가 수행됩니다:

  1. 다음 메서드를 호출합니다 AppendMessagesAsync 메서드 EWSclient 객체. 메서드는 하나를 받습니다 EwsAppendMessage 추가할 메시지, 대상 폴더 URI 및 취소 토큰을 포함하는 매개변수를 가진 객체입니다.

  2. 생성합니다 EwsAppendMessage 다음 방법을 사용한 객체 Create 메서드이며 다음 메서드 호출로 구성합니다:

    • AddMessage 추가 작업에 메시지를 추가합니다.
    • SetFolder 추가 작업의 대상 폴더 URI를 설정합니다.
    • SetCancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 취소 토큰을 설정합니다.
  3. 다음은 AppendMessagesAsync 메서드는 비동기 작업이 완료될 때 IEnumerable 객체를 반환하는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.

  4. 다음은 uris 변수에 완료된 Task의 결과가 할당되며, 이는 추가된 메시지들의 URI를 포함하는 IEnumerable 객체입니다.

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

항목 복사

아래 코드 샘플은 항목을 복사하는 방법을 보여 주며 다음 단계가 수행됩니다:

  1. 다음 메서드를 호출합니다 CopyItemAsync 메서드 EWSClient 객체. 메서드는 세 개의 매개변수를 받습니다:

    • messageUri 복사할 메시지의 URI를 나타내는 문자열입니다.
    • destinationFolderUri 대상 폴더의 URI를 나타내는 문자열입니다.
    • cancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다.

    메서드는 비동기 작업이 완료될 때 문자열을 반환하는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.

  2. newItemUri 변수에 완료된 Task의 결과가 할당되며, 이는 새로 생성된 메시지 복사본의 URI를 포함하는 문자열입니다.

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

항목 삭제

다음 코드는 이메일 메시지를 비동기적으로 삭제하려고 시도합니다.

다음 메서드를 호출합니다 DeleteItemAsync EWSClient 객체의 메서드입니다. 이 메서드는 세 개의 매개변수를 받습니다:

  • newItemUri 삭제할 항목의 URI를 나타내는 문자열입니다.
  • DeletionOptions.DeletePermanently 항목을 영구적으로 삭제하도록 지정합니다.
  • cancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다.

메서드는 비동기 작업이 완료될 때 완료되는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.

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

폴더 삭제

다음 코드는 폴더를 비동기적으로 삭제하려고 시도합니다.

다음 메서드를 호출합니다 DeleteFolderAsync EWSClient 객체의 메서드입니다. 이 메서드는 세 개의 매개변수를 받습니다:

  • folderUri 삭제할 폴더의 URI를 나타내는 문자열입니다.
  • deletePermanently 폴더를 영구 삭제할지 또는 "Deleted Items" 폴더로 이동할지를 지정합니다.
  • cancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다.

메서드는 비동기 작업이 완료될 때 완료되는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.

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

항목 업데이트

아래 코드 예제는 항목을 비동기적으로 업데이트하려고 시도합니다. 다음 단계가 수행됩니다:

  1. 생성합니다 EwsUpdateItem 다음 방법을 사용한 객체 Create 메서드에 항목 객체를 전달합니다. EwsUpdateItem은 업데이트 작업 매개변수를 나타냅니다. SetCancellationToken 메서드는 에서 호출됩니다 EwsUpdateItem 객체에, 전달합니다 cancellationToken 매개변수이며, 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다.
  2. 전달합니다 EwsUpdateItem 객체를 매개변수로 UpdateItemAsync 메서드 EWSClient.
  3. 다음은 UpdateItemAsync 메서드는 비동기 작업이 완료될 때 완료되는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));