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) 클라이언트를 비동기로 얻습니다. 코드는 다음 단계들을 수행합니다:
- 새로 생성합니다 CancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 객체.
- 인스턴스화합니다
SomeAsyncTokenProvider인터페이스를 구현하는 클래스 IAsyncTokenProvider 인터페이스. 이 클래스는 새로운 객체를 생성하기 위한 매개변수로 사용됩니다. OAuthNetworkCredential 객체. - 메일박스 URI를 Exchange Web Services 엔드포인트에 설정합니다.
- 다음 메서드를 호출합니다 GetEwsClientAsync 메서드 EWSClient 클래스와 함께
mailboxUri및OAuthNetworkCredentialobject를 매개변수로 사용합니다. 이 메서드는 Task 객체를 반환하므로, 계속 진행하기 전에 결과를 await합니다. ThecancellationToken객체가 선택적 매개변수로 전달됩니다 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);
이메일 메시지 보내기
아래 코드 예제는 이메일 메시지를 비동기로 전송하려고 합니다. 코드는 다음 단계들을 수행합니다:
- 새로 생성합니다 MailMessage 메시지 매개변수를 가진 객체.
- 다음 메서드를 호출합니다 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);
이메일 메시지 가져오기
이메일 메시지를 비동기적으로 가져오려면 아래 단계와 함께 다음 코드 예제를 사용하십시오:
-
다음을 호출합니다. FetchItemAsync EWSclient의 메서드이며, 두 개의 매개변수를 받습니다:
messageUri가져올 메시지의 URI를 나타내는 문자열입니다.cancellationToken비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다. 메서드는 다음을 반환하는 Task 객체를 반환합니다: MapiMessage 비동기 작업이 완료될 때 객체에. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.
-
다음에 할당합니다
fetched변수에 완료된 Task의 결과가 할당되며, 이는 MapiMessage 가져온 메시지 데이터를 포함하는 객체.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
이메일 메시지 추가
아래 코드 예제는 이메일 메시지를 비동기적으로 추가하려고 시도합니다. 코드는 다음 단계가 수행됩니다:
-
다음 메서드를 호출합니다 AppendMessagesAsync 메서드 EWSclient 객체. 메서드는 하나를 받습니다 EwsAppendMessage 추가할 메시지, 대상 폴더 URI 및 취소 토큰을 포함하는 매개변수를 가진 객체입니다.
-
생성합니다 EwsAppendMessage 다음 방법을 사용한 객체 Create 메서드이며 다음 메서드 호출로 구성합니다:
- AddMessage 추가 작업에 메시지를 추가합니다.
- SetFolder 추가 작업의 대상 폴더 URI를 설정합니다.
- SetCancellationToken 비동기 작업을 취소하는 데 사용할 수 있는 취소 토큰을 설정합니다.
-
다음은 AppendMessagesAsync 메서드는 비동기 작업이 완료될 때 IEnumerable
객체를 반환하는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다. -
다음은
uris변수에 완료된 Task의 결과가 할당되며, 이는 추가된 메시지들의 URI를 포함하는 IEnumerable객체입니다.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
항목 복사
아래 코드 샘플은 항목을 복사하는 방법을 보여 주며 다음 단계가 수행됩니다:
-
다음 메서드를 호출합니다 CopyItemAsync 메서드 EWSClient 객체. 메서드는 세 개의 매개변수를 받습니다:
messageUri복사할 메시지의 URI를 나타내는 문자열입니다.destinationFolderUri대상 폴더의 URI를 나타내는 문자열입니다.cancellationToken비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다.
메서드는 비동기 작업이 완료될 때 문자열을 반환하는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.
-
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);
항목 업데이트
아래 코드 예제는 항목을 비동기적으로 업데이트하려고 시도합니다. 다음 단계가 수행됩니다:
- 생성합니다 EwsUpdateItem 다음 방법을 사용한 객체 Create 메서드에 항목 객체를 전달합니다. EwsUpdateItem은 업데이트 작업 매개변수를 나타냅니다. SetCancellationToken 메서드는 에서 호출됩니다 EwsUpdateItem 객체에, 전달합니다
cancellationToken매개변수이며, 비동기 작업을 취소하는 데 사용할 수 있는 선택적 매개변수입니다. - 전달합니다 EwsUpdateItem 객체를 매개변수로 UpdateItemAsync 메서드 EWSClient.
- 다음은 UpdateItemAsync 메서드는 비동기 작업이 완료될 때 완료되는 Task 객체를 반환합니다. "await" 키워드는 Task 객체가 완료될 때까지 기다리는 데 사용됩니다.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));