package com.jacob.samples.outlook;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class Outlook {
   private static String pad(int i) {
      StringBuffer sb = new StringBuffer();
      while (sb.length() < i) {
         sb.append(' ');
      }
      return sb.toString();
   }
   private static void recurseFolders(int iIndent, Dispatch o) {
      if (o == null) {
         return;
      }
      Dispatch oFolders = Dispatch.get(o, "Folders").toDispatch();
      
      if (oFolders == null) {
         return;
      }
      Dispatch oFolder = Dispatch.get(oFolders, "GetFirst").toDispatch();
      do {
         Object oFolderName;
         try {
            oFolderName = Dispatch.get(oFolder, "Name");
            if (null == oFolderName) {
               break;
            }
         } catch (IllegalStateException e) {
            break;
         }
         System.out.println(pad(iIndent) + oFolderName);
         recurseFolders(iIndent + 3, oFolder);
         Dispatch items = Dispatch.get(oFolder, "Items").toDispatch();
         Dispatch item = Dispatch.get(items, "GetFirst").toDispatch();
         if (item != null) try {
            Object subject = Dispatch.get(item, "Subject");
            Object body = Dispatch.get(item, "Body");
            System.out.println(pad(iIndent) + "Mail: " + subject + "\nBody: " + body);
         } catch (Exception e) {
         }
         oFolder = Dispatch.get(oFolders, "GetNext").toDispatch();
      } while (true);
   }
   
   public static void main(String asArgs[]) throws Exception {
      System.out.println("Outlook: IN");
      ActiveXComponent axOutlook = new ActiveXComponent("Outlook.Application");
      try {
         System.out.println("version=" + axOutlook.getProperty("Version"));
         Dispatch oOutlook = axOutlook.getObject();
         System.out.println("version=" + Dispatch.get(oOutlook, "Version"));
         Dispatch oNameSpace = axOutlook.getProperty("Session").toDispatch();
         System.out.println("oNameSpace=" + oNameSpace);
         recurseFolders(0, oNameSpace);
      } finally {
         axOutlook.invoke("Quit", new Variant[] {});
      }
   }
}