mover.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:6k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)mover.java 1.8 03/04/22
  3.  *
  4.  * Copyright 1996-2003 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. import java.io.*;
  39. import java.util.*;
  40. import javax.mail.*;
  41. import javax.mail.internet.*;
  42. /* MOVE messages between mailboxes */
  43. public class mover {
  44.     static String protocol = "imap";
  45.     static String host = null;
  46.     static String user = null;
  47.     static String password = null;
  48.     static String src = null;
  49.     static String dest = null;
  50.     static boolean expunge = false;
  51.     static String url = null;
  52.     public static void main(String argv[]) {
  53. int start = 1; int end = -1;
  54. int optind;
  55. for (optind = 0; optind < argv.length; optind++) {
  56.     if (argv[optind].equals("-T")) {      // protocol
  57. protocol = argv[++optind];
  58.     } else if (argv[optind].equals("-H")) { // host
  59. host = argv[++optind];
  60.     } else if (argv[optind].equals("-U")) { // user
  61. user = argv[++optind];
  62.     } else if (argv[optind].equals("-P")) { // password
  63. password = argv[++optind];
  64.     } else if (argv[optind].equals("-L")) {
  65. url = argv[++optind];
  66.     } else if (argv[optind].equals("-s")) { // Source mbox
  67. src = argv[++optind];
  68.     } else if (argv[optind].equals("-d")) { // Destination mbox
  69. dest = argv[++optind];
  70.     } else if (argv[optind].equals("-x")) { // Expunge ?
  71. expunge = true;
  72.     } else if (argv[optind].equals("--")) {
  73. optind++;
  74. break;
  75.     } else if (argv[optind].startsWith("-")) {
  76. System.out.println(
  77. "Usage: mover [-T protocol] [-H host] [-U user] [-P password] [-v]");
  78. System.out.println(
  79. "t[-s source mbox] [-d destination mbox] [-x] [msgnum1] [msgnum2]");
  80. System.out.println(
  81. "t The -x option => EXPUNGE deleted messages");
  82. System.out.println(
  83. "t msgnum1 => start of message-range; msgnum2 => end of message-range");
  84. System.exit(1);
  85.     } else {
  86. break;
  87.     }
  88. }
  89. if (optind < argv.length)
  90.     start = Integer.parseInt(argv[optind++]); // start msg
  91. if (optind < argv.length)
  92.     end = Integer.parseInt(argv[optind++]);   // end msg
  93. try {
  94.     // Get a Properties object
  95.     Properties props = System.getProperties();
  96.     // Get a Session object
  97.     Session session = Session.getInstance(props, null);
  98.     // Get a Store object
  99.     Store store = null;
  100.     if (url != null) {
  101. URLName urln = new URLName(url);
  102. store = session.getStore(urln);
  103. store.connect();
  104.     } else {
  105. if (protocol != null)
  106.     store = session.getStore(protocol);
  107. else
  108.     store = session.getStore();
  109. // Connect
  110. if (host != null || user != null || password != null)
  111.     store.connect(host, user, password);
  112. else
  113.     store.connect();
  114.     }
  115.     
  116.     // Open source Folder
  117.     Folder folder = store.getFolder(src);
  118.     if (folder == null || !folder.exists()) {
  119.         System.out.println("Invalid folder: " + folder.getName());
  120.         System.exit(1);
  121.     }
  122.     folder.open(Folder.READ_WRITE);
  123.     int count = folder.getMessageCount();
  124.     if (count == 0) { // No messages in the source folder
  125. System.out.println(folder.getName() + " is empty");
  126. // Close folder, store and return
  127. folder.close(false);
  128. store.close();
  129. return;
  130.     }
  131.     // Open destination folder, create if reqd
  132.     Folder dfolder = store.getFolder(dest);
  133.     if (!dfolder.exists())
  134. dfolder.create(Folder.HOLDS_MESSAGES);
  135.     if (end == -1)
  136. end = count;
  137.     // Get the message objects to copy
  138.     Message[] msgs = folder.getMessages(start, end);
  139.     System.out.println("Moving " + msgs.length + " messages");
  140.     if (msgs.length != 0) {
  141. folder.copyMessages(msgs, dfolder);
  142. folder.setFlags(msgs, new Flags(Flags.Flag.DELETED), true);
  143. // Dump out the Flags of the moved messages, to insure that
  144. // all got deleted
  145. for (int i = 0; i < msgs.length; i++) {
  146.     if (!msgs[i].isSet(Flags.Flag.DELETED))
  147. System.out.println("Message # " + msgs[i] + 
  148. " not deleted");
  149. }
  150.     }
  151.     
  152.     // Close folders and store
  153.     folder.close(expunge);
  154.     dfolder.close(false);
  155.     store.close();
  156. } catch (MessagingException mex) {
  157.     Exception ex = mex;
  158.     do {
  159. System.out.println(ex.getMessage());
  160. if (ex instanceof MessagingException)
  161.     ex = ((MessagingException)ex).getNextException();
  162. else
  163.     ex = null;
  164.     } while (ex != null);
  165. }
  166.     }
  167. }