2016-03-30 20 views
0

Gibt es eine Möglichkeit, E-Mails aus einem benutzerdefinierten Ordner in MS-Exchange mit Java zu lesen? Ich kann aus dem Posteingang lesen, aber ich habe benutzerdefinierte Ordnernamen, in die die E-Mails verschoben werden, damit der Code in diesen Ordnern gelesen werden kann.MSExchange-E-Mails aus einem benutzerdefinierten Ordner lesen

Im Folgenden finden Sie meine aktuellen Code aus dem Posteingang zu lesen:

ExchangeCredentials credentials = new WebCredentials("userName", "passWORD", "domain"); 
service.setCredentials(credentials); 
service.setUrl(new URI("https://outlook.mycompany.com/ews/exchange.asmx")); 

ItemView view = new ItemView(200); 

FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox , view); 

Stattdessen möchte ich etwas wie folgt aus:

FindItemsResults<Item> findResults = service.findItems("My Custom Folder" , view); 

Ich habe mit dieser versucht, aber es hat nicht funktioniert:

FindItemsResults<Item> findResults = service.findItems(FolderId.getFolderIdFromString("My Custom Folder") , view); 

Antwort

1

Sie müssen den FindFolder-Vorgang verwenden, um die ewsId des fraglichen Ordners zu finden. Im Allgemeinen besteht die einfache Möglichkeit darin, den Ordner, auf den Sie zugreifen möchten, in einen Pfad umzuwandeln, zB wenn der Ordner ein Unterordner des Posteingangs ist, dann wäre die Pfadzeichenfolge \ Inbox \ Name des Unterordners, dann sollten Sie etwas wie das folgende verwenden können den Weg heraus tun mehrere Funde zu spalten den spezifischen Ordner Ihre nach erhalten (dies ist C#, aber Sie sollten leicht zu Java konvertieren können, wie die Klasse sind meist die gleichen)

internal static Folder GetFolderFromPath(ExchangeService service,String MailboxName,String FolderPath) 
    { 
     FolderId folderid = new FolderId(WellKnownFolderName.MsgFolderRoot,MailboxName); 
     Folder tfTargetFolder = Folder.Bind(service,folderid); 
     PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties); 
     String[] fldArray = FolderPath.Split('\\'); 
     for (Int32 lint = 1; lint < fldArray.Length; lint++) { 
      FolderView fvFolderView = new FolderView(1); 
      fvFolderView.PropertySet = psPropset; 
      SearchFilter SfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName,fldArray[lint]); 
      FindFoldersResults findFolderResults = service.FindFolders(tfTargetFolder.Id,SfSearchFilter,fvFolderView); 
      if (findFolderResults.TotalCount > 0){ 
      foreach(Folder folder in findFolderResults.Folders){ 
       tfTargetFolder = folder;     
       } 
      } 
      else{ 
       tfTargetFolder = null; 
       break; 
      }  
     } 
     if (tfTargetFolder != null) 
     { 
      return tfTargetFolder; 
     } 
     else 
     { 
      throw new Exception("Folder Not found"); 
     } 
    } 

Prost Glen

0

In Java scheint Code unten zu arbeiten.

FolderView fview = new FolderView(1); 
fview.setPropertySet(new PropertySet(FolderSchema.DisplayName,FolderSchema.Id)); 
Folder msgF = Folder.bind(service,WellKnownFolderName.MsgFolderRoot); 
FindFoldersResults res = msgF.findFolders(new SearchFilter.ContainsSubstring(FolderSchema.DisplayName,"test"),fview); 
List<Folder> fl = res.getFolders();