Email Java Tutorial

/*
 * @(#)namespace.java 1.5 04/02/27
 *
 * Copyright 1997-2004 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * 
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in the
 *   documentation and/or other materials provided with the distribution.
 * 
 * Neither the name of Sun Microsystems, Inc. or the names of contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 * 
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
 * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
 * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
 * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
 * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
 * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
 * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
 * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 * 
 * You acknowledge that Software is not designed, licensed or intended
 * for use in the design, construction, operation or maintenance of any
 * nuclear facility.
 */
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.FolderNotFoundException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
/*
 * Demo app that exercises the namespace interfaces. Show the namespaces
 * supported by a store.
 * 
 * @author Bill Shannon
 */
public class MainClass {
  static String protocol;
  static String host = null;
  static String user = null;
  static String password = null;
  static String url = null;
  static int port = -1;
  static boolean debug = false;
  static String suser = "other";
  public static void main(String argv[]) {
    int msgnum = -1;
    int optind;
    for (optind = 0; optind < argv.length; optind++) {
      if (argv[optind].equals("-T")) {
        protocol = argv[++optind];
      } else if (argv[optind].equals("-H")) {
        host = argv[++optind];
      } else if (argv[optind].equals("-U")) {
        user = argv[++optind];
      } else if (argv[optind].equals("-P")) {
        password = argv[++optind];
      } else if (argv[optind].equals("-D")) {
        debug = true;
      } else if (argv[optind].equals("-L")) {
        url = argv[++optind];
      } else if (argv[optind].equals("-p")) {
        port = Integer.parseInt(argv[++optind]);
      } else if (argv[optind].equals("-u")) {
        suser = argv[++optind];
      } else if (argv[optind].equals("--")) {
        optind++;
        break;
      } else if (argv[optind].startsWith("-")) {
        System.out.println("Usage: namespace [-L url] [-T protocol] [-H host] [-p port] [-U user]");
        System.out.println("\t[-P password] [-u other-user] [-D]");
        System.exit(1);
      } else {
        break;
      }
    }
    try {
      // Get a Properties object
      Properties props = System.getProperties();
      // Get a Session object
      Session session = Session.getInstance(props, null);
      session.setDebug(debug);
      // Get a Store object
      Store store = null;
      if (url != null) {
        URLName urln = new URLName(url);
        store = session.getStore(urln);
        store.connect();
      } else {
        if (protocol != null)
          store = session.getStore(protocol);
        else
          store = session.getStore();
        // Connect
        if (host != null || user != null || password != null)
          store.connect(host, port, user, password);
        else
          store.connect();
      }
      printFolders("Personal", store.getPersonalNamespaces());
      printFolders("User \"" + suser + "\"", store.getUserNamespaces(suser));
      printFolders("Shared", store.getSharedNamespaces());
      store.close();
    } catch (Exception ex) {
      System.out.println("Oops, got exception! " + ex.getMessage());
      ex.printStackTrace();
    }
    System.exit(0);
  }
  private static void printFolders(String name, Folder[] folders) throws MessagingException {
    System.out.println(name + " Namespace:");
    if (folders == null || folders.length == 0) {
      System.out.println("  ");
      return;
    }
    for (int i = 0; i < folders.length; i++) {
      String fn = folders[i].getFullName();
      if (fn.length() == 0)
        fn = "";
      try {
        System.out.println("  " + fn + ", delimiter \"" + folders[i].getSeparator() + "\"");
        Folder[] fl = folders[i].list();
        if (fl.length > 0) {
          System.out.println("  Subfolders:");
          for (int j = 0; j < fl.length; j++)
            System.out.println("    " + fl[j].getFullName());
        }
      } catch (FolderNotFoundException ex) {
      }
    }
  }
}