2010-08-04 2 views
0

EWS (Exchange Web Services) 관리 API를 사용하여 사서함에서 전자 메일을 읽는 방법을 작성해야합니다. 현재 이메일의 ItemId/UniqueId는 현재 이메일 이후의받은 편지함에있는 다음 이메일의 ItemId/UniqueId를 반환합니다.다음 전자 메일의 ItemId 가져 오기 항목 EWS (Exchange Web Services)를 사용하여 현재 전자 메일의 ID 관리 된 API

또한 여러 가지 이유로 메소드가 정적 상태 비 저장 메소드가되어야합니다. 즉, 메소드 호출간에 지속되는 멤버/전역 변수에 의존 할 수 없습니다. 따라서 단순히 FindItemsResults 객체의 인스턴스에 대한 참조를 저장하고 메서드가 호출 될 때마다 다음 항목으로 이동할 수 없습니다.

난 (단, 오류가 체크되지 간단한 예) 다음 코드 사용 방법을 구현하려 한 그러나

using Microsoft.Exchange.WebServices; 
using Microsoft.Exchange.WebServices.Data; 
... 
... 
public string GetNextEmailId(string currentItemId) 
{ 
    // set up Exchange Web Service connection 
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
    service.AutodiscoverUrl("[email protected]"); 
    // create SearchFilter to find next email after current email 
    ItemId itemId = new ItemId(currentItemId); 
    SearchFilter sfNextEmail = new SearchFilter.IsGreaterThan(EmailMessageSchema.Id, itemId); 
    // find next email in inbox 
    ItemView itemView = new ItemView(1); 
    itemView.OrderBy.Add(EmailMessageSchema.DateTimeReceived, SortDirection.Ascending); 
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sfNextEmail, itemView); 
    // return unique ID of next email 
    return findResults.Items[0].Id.UniqueId; 
} 

를 I는 그것이 service.FindItems 행에서 다음과 같은 예외가 발생이 방법을 실행하면

System.ArgumentException : "유효성 검사가 실패했습니다. 매개 변수 이름 : searchFilter"
내부 예외 - Microsoft.Exchange.WebServices.Data.ServiceValidationException : " 'ItemId'형식의 값을 검색 필터의 비교 값으로 사용할 수 없습니다."

하나의 옵션은 FindItems를 사용하여받은 편지함에있는 모든 이메일을 찾고 현재 이메일을 찾을 때까지 ItemId를 확인한 다음 반복하여 다음 ID로 돌아가 고유 ID를 반환하는 것입니다. 그러나 나는 이것이 느리고 비효율적 일 것 같다고 생각한다. 나는 이것을 달성하는 더 좋은 방법이 있기를 희망하고있다.

도움이나 의견을 크게 주시면 감사하겠습니다. 웹 검색 솔루션을 찾을 수 없었습니다. 현재 이메일의 항목 ID를 알고있는 경우

답변

6

당신은 바인딩 할 수 있습니다

EmailMessage 전류 = EmailMessage.Bind (서비스 ID);

그런 다음 현재 이메일에 날짜가 수신되었습니다. 그보다 큰 모든 날짜에 대해 검색 필터를 만들고 이미 가지고있는 코드로 주문을 사용하십시오.