Exchange Server에서 작업 다루기
작업 다루기
Aspose.Email는 Exchange에서 작업을 처리하는 것을 지원합니다. ExchangeTask 클래스. 다양한 속성이 노출됩니다. ExchangeTask, 같은 Subject, 상태, 마감일, 그리고 우선순위, Exchange에서 작업을 구성하는 데 사용할 수 있습니다. EWSClient 클래스는 다음과 같은 기능을 제공합니다: createTask, updateTask, 그리고 deleteTask Exchange에서 작업을 처리하는 데 사용됩니다. 이 문서에서는 다음과 같은 방법을 보여줍니다:
- 새 작업을 생성합니다.
- 작업의 시간대를 설정합니다.
- 작업을 업데이트합니다.
- 작업을 삭제합니다.
- 작업 요청 보내기
- 작업을 디스크에 저장
새 작업 만들기
다음 코드 스니펫은 새로운 작업을 만드는 방법을 보여줍니다.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Create Exchange task object
ExchangeTask task = new ExchangeTask();
// Set task subject and status to In progress
task.setSubject("New-Test");
task.setStatus(ExchangeTaskStatus.InProgress);
client.createTask(client.getMailboxInfo().getTasksUri(), task);
시간대 지정
다음은 IEWSClient 인터페이스 및 ExchangeTask 작업을 생성할 때 시간대 정보를 설정하기 위해 TimeZoneId 속성을 제공합니다. 다음 코드 스니펫은 시간대를 지정하는 방법을 보여줍니다.
client.setTimezoneId("Central Europe Standard Time");
작업 업데이트
다음 코드 스니펫은 Exchange 서버에서 작업을 업데이트하는 방법을 보여줍니다.
// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get all tasks info collection from exchange
ExchangeMessageInfoCollection tasks = client.listMessages(client.getMailboxInfo().getTasksUri());
// Parse all the tasks info in the list
for (ExchangeMessageInfo info : (Iterable<ExchangeMessageInfo>) tasks) {
// Fetch task from exchange using current task info
ExchangeTask task = client.fetchTask(info.getUniqueUri());
// Update the task status to NotStarted
task.setStatus(ExchangeTaskStatus.NotStarted);
// Set the task due date
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
task.setDueDate(sdf.parse("26/02/2013 00:00:00"));
// Set task priority
task.setPriority(MailPriority.Low.getValue());
// Update task on exchange
client.updateTask(task);
}
작업 삭제
다음 코드 스니펫은 Exchange 서버에서 작업을 삭제하는 방법을 보여줍니다.
// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get all tasks info collection from exchange
ExchangeMessageInfoCollection tasks = client.listMessages(client.getMailboxInfo().getTasksUri());
// Parse all the tasks info in the list
for (ExchangeMessageInfo info : (Iterable<ExchangeMessageInfo>) tasks) {
// Fetch task from exchange using current task info
ExchangeTask task = client.fetchTask(info.getUniqueUri());
// Check if the current task fulfills the search criteria
if (task.getSubject().equals("test")) {
// Delete task from exchange
client.deleteItem(task.getUniqueUri(), DeletionOptions.getDeletePermanently());
}
}
작업 요청 전송
Aspose.Email Exchange 서비스는 Outlook과 유사하게 작업 요청을 보낼 수 있는 기능을 제공합니다. 다음 코드 스니펫은 디스크에서 작업 요청 메시지를 로드하고 이를 사용하여 보내는 방법을 보여줍니다. IEWSClient.
// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MsgLoadOptions options = new MsgLoadOptions();
options.setPreserveTnefAttachments(true);
// load task from .msg file
MailMessage eml = MailMessage.load(dataDir + "task.msg", options);
eml.setFrom(MailAddress.to_MailAddress("firstname.lastname@domain.com"));
eml.getTo().clear();
eml.getTo().addMailAddress(new MailAddress("firstname.lastname@domain.com"));
client.send(eml);
작업을 디스크에 저장
Aspose.Email은 Exchange 작업을 Outlook MSG 형식으로 디스크에 저장할 수도 있습니다. 다음 코드 스니펫은 작업을 디스크에 저장하는 방법을 보여줍니다.
ExchangeTask task = new ExchangeTask();
task.setSubject("TASK-ID - " + UUID.randomUUID());
task.setStatus(ExchangeTaskStatus.InProgress);
Calendar cal = Calendar.getInstance();
task.setStartDate(cal.getTime());
cal.add(Calendar.DATE, 3);
task.setDueDate(cal.getTime());
task.save(dstEmail);
Exchange Server에서 작업 목록 조회
IEWSClient 제공합니다 listTasks Exchange Web Service에서 작업을 가져오는 데 사용할 수 있는 메서드입니다. 특정 폴더에서 작업 목록을 가져오거나 검색 기준을 사용하여 가져오는 여러 오버로드가 있습니다. 아래 코드 샘플은 Tasks 폴더에서 모든 작업 또는 특정 작업을 가져오는 예시를 보여줍니다.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
// Listing Tasks from Server
client.setTimezoneId("Central Europe Standard Time");
TaskCollection taskCollection = client.listTasks(client.getMailboxInfo().getTasksUri());
// print retrieved tasks' details
int iTasksCount = taskCollection.size();
for (int i = 0; i < iTasksCount; i++) {
ExchangeTask task = (ExchangeTask) taskCollection.get_Item(i);
System.out.println(task.getSubject());
System.out.println(task.getStartDate());
System.out.println(task.getDueDate());
}
// Listing Tasks from server based on Query - Completed and In-Progress
Integer[] selectedStatuses = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.InProgress };
ExchangeQueryBuilder queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().in(Arrays.asList(selectedStatuses));
MailQuery query = queryBuilder.getQuery();
taskCollection = client.listTasks(client.getMailboxInfo().getTasksUri(), query);
// print retrieved tasks' details
iTasksCount = taskCollection.size();
for (int i = 0; i < iTasksCount; i++) {
ExchangeTask task = (ExchangeTask) taskCollection.get_Item(i);
System.out.println(task.getSubject());
System.out.println(task.getStartDate());
System.out.println(task.getDueDate());
}
Exchange Server에서 작업 필터링
Aspose.Email은 서버에서 모든 작업을 가져오는 대신 특정 작업만 검색할 수 있는 기능을 제공합니다. API를 사용하면 Completed, Deferred, In Progress, Not started, Waiting on others와 같은 작업 상태별로 작업을 검색할 수 있습니다. ExchangeQueryBuilder 클래스는 Status 속성을 사용하여 원하는 기준을 지정할 수 있습니다. 또한 Exchange Server에서 원하는 작업을 검색하기 위해 여러 조건을 지정할 수 있습니다. 다음 코드 샘플이 이를 보여줍니다.
// Create instance of ExchangeClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Set timezone for tasks
client.setTimezoneId("Central Europe Standard Time");
// We use these status values for specifying in queries
Integer[] values = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.Deferred, ExchangeTaskStatus.InProgress, ExchangeTaskStatus.NotStarted,
ExchangeTaskStatus.WaitingOnOthers };
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri());
// Now retrieve the tasks with specific statuses
for (int status : values) {
queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().equals(status);
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);
fetchedTask = client.fetchTask(messageInfoCol.get_Item(0).getUniqueUri());
}
// retrieve all other than specified
for (int status : values) {
queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().notEquals((int) status);
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);
}
// specifying multiple criterion
Integer[] selectedStatuses = new Integer[] { ExchangeTaskStatus.Completed, ExchangeTaskStatus.InProgress };
queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().in(Arrays.asList(selectedStatuses));
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);
// list all those which are not in our specified statuses
queryBuilder = new ExchangeQueryBuilder();
queryBuilder.getTaskStatus().notIn(Arrays.asList(selectedStatuses));
query = queryBuilder.getQuery();
messageInfoCol = client.listMessages(client.getMailboxInfo().getTasksUri(), query);