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

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)uidmsgshow.java 1.6 03/04/22
  3.  *
  4.  * Copyright 1997-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.util.*;
  39. import java.io.*;
  40. import javax.mail.*;
  41. import javax.mail.internet.*;
  42. import javax.activation.*;
  43. /*
  44.  * Demo app that exercises the Message interfaces.
  45.  * Access message given its UID.
  46.  * Show information about and contents of messages.
  47.  *
  48.  * @author John Mani
  49.  * @author Bill Shannon
  50.  */
  51. public class uidmsgshow {
  52.     static String protocol;
  53.     static String host = null;
  54.     static String user = null;
  55.     static String password = null;
  56.     static String mbox = "INBOX";
  57.     static String url = null;
  58.     static boolean verbose = false;
  59.     public static void main(String argv[]) {
  60. long uid = -1;
  61. int optind;
  62. for (optind = 0; optind < argv.length; optind++) {
  63.     if (argv[optind].equals("-T")) {
  64. protocol = argv[++optind];
  65.     } else if (argv[optind].equals("-H")) {
  66. host = argv[++optind];
  67.     } else if (argv[optind].equals("-U")) {
  68. user = argv[++optind];
  69.     } else if (argv[optind].equals("-P")) {
  70. password = argv[++optind];
  71.     } else if (argv[optind].equals("-v")) {
  72. verbose = true;
  73.     } else if (argv[optind].equals("-f")) {
  74. mbox = argv[++optind];
  75.     } else if (argv[optind].equals("-L")) {
  76. url = argv[++optind];
  77.     } else if (argv[optind].equals("--")) {
  78. optind++;
  79. break;
  80.     } else if (argv[optind].startsWith("-")) {
  81. System.out.println("Usage: uidmsgshow [-L url] [-T protocol] [-H host] [-U user] [-P password] [-f mailbox] [uid] [-v]");
  82. System.exit(1);
  83.     } else {
  84. break;
  85.     }
  86. }
  87.         try {
  88.     if (optind < argv.length)
  89.          uid = Long.parseLong(argv[optind]);
  90.     // Get a Properties object
  91.     Properties props = System.getProperties();
  92.     // Get a Session object
  93.     Session session = Session.getInstance(props, null);
  94.     // session.setDebug(true);
  95.     // Get a Store object
  96.     Store store = null;
  97.     if (url != null) {
  98. URLName urln = new URLName(url);
  99. store = session.getStore(urln);
  100. store.connect();
  101.     } else {
  102. if (protocol != null)
  103.     store = session.getStore(protocol);
  104. else
  105.     store = session.getStore();
  106. // Connect
  107. if (host != null || user != null || password != null)
  108.     store.connect(host, user, password);
  109. else
  110.     store.connect();
  111.     }
  112.     
  113.     // Open the Folder
  114.     Folder folder = store.getDefaultFolder();
  115.     if (folder == null) {
  116.         System.out.println("No default folder");
  117.         System.exit(1);
  118.     }
  119.     folder = folder.getFolder(mbox);
  120.     if (!folder.exists()) {
  121.         System.out.println(mbox + "  does not exist");
  122.         System.exit(1);
  123.     }
  124.     if (!(folder instanceof UIDFolder)) {
  125.         System.out.println(
  126.     "This Provider or this folder does not support UIDs");
  127.         System.exit(1);
  128.     }
  129.     UIDFolder ufolder = (UIDFolder)folder;
  130.     folder.open(Folder.READ_WRITE);
  131.     int totalMessages = folder.getMessageCount();
  132.     if (totalMessages == 0) {
  133. System.out.println("Empty folder");
  134. folder.close(false);
  135. store.close();
  136. System.exit(1);
  137.     }
  138.     if (verbose) {
  139. int newMessages = folder.getNewMessageCount();
  140. System.out.println("Total messages = " + totalMessages);
  141. System.out.println("New messages = " + newMessages);
  142. System.out.println("-------------------------------");
  143.     }
  144.     if (uid == -1) {
  145. // Attributes & Flags for ALL messages ..
  146. Message[] msgs = 
  147. ufolder.getMessagesByUID(1, UIDFolder.LASTUID);
  148. // Use a suitable FetchProfile
  149. FetchProfile fp = new FetchProfile();
  150. fp.add(FetchProfile.Item.ENVELOPE);
  151. fp.add(FetchProfile.Item.FLAGS);
  152. fp.add("X-Mailer");
  153. folder.fetch(msgs, fp);
  154. for (int i = 0; i < msgs.length; i++) {
  155.     System.out.println("--------------------------");
  156.     System.out.println("MESSAGE UID #" + 
  157. ufolder.getUID(msgs[i]) + ":");
  158.     dumpEnvelope(msgs[i]);
  159.     // dumpPart(msgs[i]);
  160. }
  161.     } else {
  162. System.out.println("Getting message UID: " + uid);
  163. Message m = ufolder.getMessageByUID(uid);
  164. if (m != null)
  165.     dumpPart(m);
  166. else
  167.     System.out.println(
  168. "This Message does not exist on this folder");
  169.     }
  170.     folder.close(false);
  171.     store.close();
  172. } catch (Exception ex) {
  173.     System.out.println("Oops, got exception! " + ex.getMessage());
  174.     ex.printStackTrace();
  175. }
  176. System.exit(1);
  177.     }
  178.     public static void dumpPart(Part p) throws Exception {
  179. if (p instanceof Message)
  180.     dumpEnvelope((Message)p);
  181. /* Dump input stream
  182. InputStream is = new BufferedInputStream(p.getInputStream());
  183. int c;
  184. while ((c = is.read()) != -1)
  185.     System.out.write(c);
  186. */
  187. System.out.println("CONTENT-TYPE: " + p.getContentType());
  188. Object o = p.getContent();
  189. if (o instanceof String) {
  190.     System.out.println("This is a String");
  191.     System.out.println("---------------------------");
  192.     System.out.println((String)o);
  193. } else if (o instanceof Multipart) {
  194.     System.out.println("This is a Multipart");
  195.     System.out.println("---------------------------");
  196.     Multipart mp = (Multipart)o;
  197.     int count = mp.getCount();
  198.     for (int i = 0; i < count; i++)
  199. dumpPart(mp.getBodyPart(i));
  200. } else if (o instanceof Message) {
  201.     System.out.println("This is a Nested Message");
  202.     System.out.println("---------------------------");
  203.     dumpPart((Part)o);
  204. } else if (o instanceof InputStream) {
  205.     System.out.println("This is just an input stream");
  206.     System.out.println("---------------------------");
  207.     InputStream is = (InputStream)o;
  208.     int c;
  209.     while ((c = is.read()) != -1)
  210. System.out.write(c);
  211. }
  212.     }
  213.     public static void dumpEnvelope(Message m) throws Exception {
  214. System.out.println("This is the message envelope");
  215. System.out.println("---------------------------");
  216. Address[] a;
  217. // FROM 
  218. if ((a = m.getFrom()) != null) {
  219.     for (int j = 0; j < a.length; j++)
  220. System.out.println("FROM: " + a[j].toString());
  221. }
  222. // TO
  223. if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
  224.     for (int j = 0; j < a.length; j++)
  225. System.out.println("TO: " + a[j].toString());
  226. }
  227. // SUBJECT
  228. System.out.println("SUBJECT: " + m.getSubject());
  229. // DATE
  230. Date d = m.getSentDate();
  231. System.out.println("SendDate: " +
  232.     (d != null ? d.toString() : "UNKNOWN"));
  233. // SIZE
  234. System.out.println("Size: " + m.getSize());
  235. // FLAGS:
  236. Flags flags = m.getFlags();
  237. StringBuffer sb = new StringBuffer();
  238. Flags.Flag[] sf = flags.getSystemFlags(); // get the system flags
  239. boolean first = true;
  240. for (int i = 0; i < sf.length; i++) {
  241.     String s;
  242.     Flags.Flag f = sf[i];
  243.     if (f == Flags.Flag.ANSWERED)
  244. s = "\Answered";
  245.     else if (f == Flags.Flag.DELETED)
  246. s = "\Deleted";
  247.     else if (f == Flags.Flag.DRAFT)
  248. s = "\Draft";
  249.     else if (f == Flags.Flag.FLAGGED)
  250. s = "\Flagged";
  251.     else if (f == Flags.Flag.RECENT)
  252. s = "\Recent";
  253.     else if (f == Flags.Flag.SEEN)
  254. s = "\Seen";
  255.     else
  256. continue; // skip it
  257.     if (first)
  258. first = false;
  259.     else
  260. sb.append(' ');
  261.     sb.append(s);
  262. }
  263. String[] uf = flags.getUserFlags(); // get the user flag strings
  264. for (int i = 0; i < uf.length; i++) {
  265.     if (first)
  266. first = false;
  267.     else
  268. sb.append(' ');
  269.     sb.append(uf[i]);
  270. }
  271. System.out.println("FLAGS = " + sb.toString());
  272. // X-MAILER
  273. String[] hdrs = m.getHeader("X-Mailer");
  274. if (hdrs != null)
  275.     System.out.println("X-Mailer: " + hdrs[0]);
  276. else
  277.     System.out.println("X-Mailer NOT available");
  278.     }
  279. }