2010-06-14 4 views
7

특정 Exchange 사서함을 모니터링하는 간단한 콘솔 응용 프로그램을 작성하고 있으며 특정 조건을 충족하는 전자 메일을 받으면 응용 프로그램에서 XML 파일 첨부 파일을 다운로드하고 이메일을 보관하십시오.Exchange 웹 서비스 - 메시지 처리 및 첨부 파일 액세스

저는 EWS에 연결 했으므로 OK입니다. 이메일을 통해 반복 할 수 있었지만 첨부 파일에 액세스하는 데 사용할 수있는 EmailMessage 객체를 만들 때 어려움을 겪고 있습니다.

아래의 예제 코드에서 EmailMessage message = EmailMessage.Bind(...) 행은 오류없이 실행되지만 유효한 메시지를 반환하지 않으므로 액세스하고 속성이나 메서드에 액세스 할 때 오류가 발생합니다. '개체 참조가 개체의 인스턴스로 설정되지 않았습니다. '.

나는 ...

코드 조각 그래서 어디서부터 시작 알고 사투를 벌인거야 C# 커녕 EWS에 새로운 해요 :

public static void FindItems() 
    { 
     try 
     { 
      ItemView view = new ItemView(10); 
      view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending); 
      view.PropertySet = new PropertySet(
       BasePropertySet.IdOnly, 
       ItemSchema.Subject, 
       ItemSchema.DateTimeReceived); 

      findResults = service.FindItems(
       WellKnownFolderName.Inbox, 
       new SearchFilter.SearchFilterCollection(
        LogicalOperator.Or, 
        new SearchFilter.ContainsSubstring(ItemSchema.Subject, "Sales Enquiry")), 
       view); 

      log2.LogInfo("Total number of items found: " + findResults.TotalCount.ToString()); 

      foreach (Item item in findResults) 
      { 
       log2.LogInfo(item.Id); 

       EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments)); 

       Console.WriteLine(message.Subject.ToString()); 

       if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
       { 
        FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
        fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
        fileAttachment.Load(); 
        Console.WriteLine("FileName: " + fileAttachment.FileName); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      log2.LogError(ex.InnerException); 
     } 
    } 

첨부 파일을 액세스하는 내 코드는 MSDN에서 직선 그래서 나는 그곳에 그곳이 있기를 바라고 ... 어떤 생각?

+1

속성 집합에 제목이 포함되어 있지 않기 때문에 제목 줄을 인쇄 할 수 없을 것이라고 생각합니다. 해당 코드로 Exchange로부터 어떤 결과가 반환됩니까? emailmessage 객체가 유효합니까? 다음 내용이 도움이 될 수 있습니다. http : //social.technet.microsoft.com/Forums/en/exchangesvrdevelopment/thread/1d7d0be3-1e48-43c4-b2df-f6fa5c7bf254 바인딩 할 항목을 반복 할 필요가 없습니다 - LoadPropertiesForItems를 시도해보고 작동하는지 확인하십시오. – Chris

답변

12

이 문제를 다시 조사하고 치료할 수 있을지 걱정됩니다. 불행히도 나는 여기에 와서 해결책을 문서화 할 때가 너무 어려웠다. 시간은 통과 한, 나는이 변경 무엇 내 기억은 퇴색했지만, 지금까지 내가 기억으로는 한 줄 변경했다 :

EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments)); 

여기서 중요한 차이는 우리의 첫 번째 매개 변수로 BasePropertySet.FirstClassProperties을 지정한 것입니다 우리가 원래 가지고 있던 BasePropertySet.IdOnly보다는 PropertySet.

원본 코드가 예제에서 온라인으로 완성되어 정확하게 달성하지 못 했으므로 예제가 옳지 않았거나 잘못 그렸거나 문제의 일부를 오해 한 것입니다.

0
foreach(EmailMessage message in findResults) 
{ 
    message.Load(); 

    Console.WriteLine(message.Subject.ToString()); 

    if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
    { 
     FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
     fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
     fileAttachment.Load(); 
     Console.WriteLine("FileName: " + fileAttachment.FileName); 
    } 
}