/**
  * Reading one email at a time. Using Item ID of the email. Creating a message data map as a
  * return value.
  */
 public Map readEmailItem(ItemId itemId, boolean doDelete) {
   Map messageData = new HashMap();
   try {
     Item itm = Item.bind(exchangeService, itemId, PropertySet.FirstClassProperties);
     EmailMessage emailMessage = EmailMessage.bind(exchangeService, itm.getId());
     if (doDelete) {
       System.out.println("deleting item: " + itm.getSubject());
       itm.delete(DeleteMode.HardDelete);
       emailMessage.delete(DeleteMode.HardDelete);
     } else {
       messageData.put("emailItemId", emailMessage.getId().toString());
       messageData.put("subject", emailMessage.getSubject());
       messageData.put("fromAddress", emailMessage.getFrom().getAddress().toString());
       messageData.put("senderName", emailMessage.getSender().getName().toString());
       Date dateTimeCreated = emailMessage.getDateTimeCreated();
       messageData.put("SendDate", dateTimeCreated.toString());
       Date dateTimeReceived = emailMessage.getDateTimeReceived();
       messageData.put("ReceivedDate", dateTimeReceived.toString());
       messageData.put("Size", emailMessage.getSize() + "");
       messageData.put("emailBody", emailMessage.getBody().toString());
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
   return messageData;
 }
  public void findFolder() throws Exception {
    // Create a view with a page size of 10.
    FolderView view = new FolderView(10);

    // Identify the properties to return in the results set.
    view.setPropertySet(new PropertySet(IdOnly));
    view.getPropertySet().add(FolderSchema.DisplayName);

    // Return only folders that contain items.
    SearchFilter searchFilter = new SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 100);

    // Unlike FindItem searches, folder searches can be deep traversals.
    view.setTraversal(FolderTraversal.Deep);

    // Send the request to search the mailbox and get the results.
    FindFoldersResults findFolderResults =
        exchangeService.findFolders(WellKnownFolderName.Root, searchFilter, view);

    // Process each item.
    for (Folder myFolder : findFolderResults.getFolders()) {
      System.out.println(myFolder.getDisplayName());
      if (myFolder.getDisplayName().equalsIgnoreCase("Other")) {
        FindItemsResults<Item> itemresults;
        int count = 0;
        do {
          // empty the deleted folder
          // emptyDelete();
          // move items from other to deleted items
          itemresults = exchangeService.findItems(myFolder.getId(), new ItemView(100));
          System.out.println(" Is more Avail: " + itemresults.isMoreAvailable());
          for (Item item : itemresults.getItems()) {
            count++;
            System.out.println(item.getSubject());
            // Item itm = Item.bind(exchangeService, itemId, PropertySet.FirstClassProperties);
            EmailMessage emailMessage = EmailMessage.bind(exchangeService, item.getId());
            System.out.println("deleting : " + emailMessage.getSubject());
            try {
              emailMessage.delete(DeleteMode.HardDelete);
              // item.delete(DeleteMode.HardDelete);
              // item.move(WellKnownFolderName.DeletedItems);
            } catch (Exception e) {
              e.printStackTrace();
            }
          }
        } while (itemresults.isMoreAvailable());
        System.out.println("Item deleted: " + count);
        // emptyDelete();
      }
    }
  }