MOVE messages between mailboxes : Email Server « Email « Java Tutorial






/*
 * @(#)mover.java 1.9 05/11/17
 *
 * Copyright 1996-2003 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.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;

/* MOVE messages between mailboxes */

public class MainClass {

  static String protocol = "imap";

  static String host = null;

  static String user = null;

  static String password = null;

  static String src = null;

  static String dest = null;

  static boolean expunge = false;

  static String url = null;

  public static void main(String argv[]) {
    int start = 1;
    int end = -1;
    int optind;

    for (optind = 0; optind < argv.length; optind++) {
      if (argv[optind].equals("-T")) { // protocol
        protocol = argv[++optind];
      } else if (argv[optind].equals("-H")) { // host
        host = argv[++optind];
      } else if (argv[optind].equals("-U")) { // user
        user = argv[++optind];
      } else if (argv[optind].equals("-P")) { // password
        password = argv[++optind];
      } else if (argv[optind].equals("-L")) {
        url = argv[++optind];
      } else if (argv[optind].equals("-s")) { // Source mbox
        src = argv[++optind];
      } else if (argv[optind].equals("-d")) { // Destination mbox
        dest = argv[++optind];
      } else if (argv[optind].equals("-x")) { // Expunge ?
        expunge = true;
      } else if (argv[optind].equals("--")) {
        optind++;
        break;
      } else if (argv[optind].startsWith("-")) {
        System.out
            .println("Usage: mover [-T protocol] [-H host] [-U user] [-P password] [-L url] [-v]");
        System.out.println("\t[-s source mbox] [-d destination mbox] [-x] [msgnum1] [msgnum2]");
        System.out.println("\t The -x option => EXPUNGE deleted messages");
        System.out.println("\t msgnum1 => start of message-range; msgnum2 => end of message-range");
        System.exit(1);
      } else {
        break;
      }
    }

    if (optind < argv.length)
      start = Integer.parseInt(argv[optind++]); // start msg

    if (optind < argv.length)
      end = Integer.parseInt(argv[optind++]); // end msg

    try {
      // Get a Properties object
      Properties props = System.getProperties();

      // Get a Session object
      Session session = Session.getInstance(props, null);

      // 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, user, password);
        else
          store.connect();
      }

      // Open source Folder
      Folder folder = store.getFolder(src);
      if (folder == null || !folder.exists()) {
        System.out.println("Invalid folder: " + folder.getName());
        System.exit(1);
      }

      folder.open(Folder.READ_WRITE);

      int count = folder.getMessageCount();
      if (count == 0) { // No messages in the source folder
        System.out.println(folder.getName() + " is empty");
        // Close folder, store and return
        folder.close(false);
        store.close();
        return;
      }

      // Open destination folder, create if reqd
      Folder dfolder = store.getFolder(dest);
      if (!dfolder.exists())
        dfolder.create(Folder.HOLDS_MESSAGES);

      if (end == -1)
        end = count;

      // Get the message objects to copy
      Message[] msgs = folder.getMessages(start, end);
      System.out.println("Moving " + msgs.length + " messages");

      if (msgs.length != 0) {
        folder.copyMessages(msgs, dfolder);
        folder.setFlags(msgs, new Flags(Flags.Flag.DELETED), true);

        // Dump out the Flags of the moved messages, to insure that
        // all got deleted
        for (int i = 0; i < msgs.length; i++) {
          if (!msgs[i].isSet(Flags.Flag.DELETED))
            System.out.println("Message # " + msgs[i] + " not deleted");
        }
      }

      // Close folders and store
      folder.close(expunge);
      store.close();

    } catch (MessagingException mex) {
      Exception ex = mex;
      do {
        System.out.println(ex.getMessage());
        if (ex instanceof MessagingException)
          ex = ((MessagingException) ex).getNextException();
        else
          ex = null;
      } while (ex != null);
    }
  }
}








30.7.Email Server
30.7.1.Get All Message On Server
30.7.2.Search the given folder for messages matching the given criteria
30.7.3.List information about folders
30.7.4.Copy a specified number of messages from one folder to another folder
30.7.5.Copy folder hierarchies between different Stores
30.7.6.MOVE messages between mailboxes
30.7.7.Show the namespaces supported by a store