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

Java编程

开发平台:

Java

  1. package bible.javamail;
  2. import java.io.*;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.util.*;
  6. import java.text.*;
  7. import javax.activation.*;
  8. import javax.mail.*;
  9. import javax.mail.internet.*;
  10. import javax.naming.*;
  11. /**
  12.  * Class DisplayMessage
  13.  *
  14.  *
  15.  * @author
  16.  * @version %I%, %G%
  17.  */
  18. public class DisplayMessage extends HttpServlet {
  19.   private PrintWriter pw;
  20.   private Session     session;
  21.   private Store       store;
  22.   private Folder      defaultFolder;
  23.   private Folder      folder;
  24.   private String      folderName;
  25.   private int         msgid;
  26.   private Message     message;
  27.   /**
  28.    * Method doGet
  29.    *
  30.    *
  31.    * @param req
  32.    * @param res
  33.    *
  34.    * @throws IOException
  35.    * @throws ServletException
  36.    *
  37.    */
  38.   public void doGet(HttpServletRequest req, HttpServletResponse res)
  39.     throws ServletException, IOException {
  40.     pw = res.getWriter();
  41.     res.setContentType("text/html");
  42.     String cmd = req.getParameter("cmd");
  43.     folderName = req.getParameter("folder");
  44.     msgid      = new Integer(req.getParameter("msgid")).intValue();
  45.     // display message
  46.     if (cmd.equals("display")) {
  47.       displayMessage();
  48.       // delete message
  49.     } else if (cmd.equals("delete")) {
  50.       deleteMessage();
  51.       RequestDispatcher rd =
  52.         getServletContext().getNamedDispatcher("DisplayMessages");
  53.       rd.forward(req, res);
  54.     }
  55.   }
  56.   private void getDefaultFolder()
  57.     throws NamingException, NoSuchProviderException, MessagingException {
  58.     // lookup mail session in JNDI
  59.     InitialContext context = new InitialContext();
  60.     session = (Session) context.lookup("BibleMailSession");
  61.     // get store and create an authenticated session
  62.     store = session.getStore();
  63.     store.connect("xxx.xxx.xxx.xxx", "username", "password");
  64.     // get the default folder
  65.     defaultFolder = store.getDefaultFolder();
  66.   }
  67.   private void getMessage() throws MessagingException, NamingException {
  68.     // try to open foler read/write otherwise read-only
  69.     getDefaultFolder();
  70.     folder = defaultFolder.getFolder(folderName);
  71.     try {
  72.       folder.open(Folder.READ_WRITE);
  73.     } catch (MessagingException ex) {
  74.       folder.open(Folder.READ_ONLY);
  75.     }
  76.     // get message
  77.     message = folder.getMessage(msgid);
  78.   }
  79.   private void displayMessage() {
  80.     pw.println("<HTML><HEAD><TITLE>Message Detail</TITLE></HEAD>");
  81.     pw.println("<BODY><H1>Message Detail</H1>");
  82.     try {
  83.       getMessage();
  84.       // display the message
  85.       pw.println("<TABLE width='100%'>");
  86.       pw.println("<TR><TD>Sent:</TD><TD>" + getSent() + "</TD></TR>");
  87.       pw.println("<TR><TD>Received:</TD><TD>" + getReceived() + "</TD></TR>");
  88.       pw.println("<TR><TD>From:</TD><TD>" + getFrom() + "</TD></TR>");
  89.       pw.println("<TR><TD>Reply to:</TD><TD>" + getReplyTo() + "</TD></TR>");
  90.       pw.println("<TR><TD>To:</TD><TD>" + getTo() + "</TD></TR>");
  91.       pw.println("<TR><TD>Cc:</TD><TD>" + getCc() + "</TD></TR>");
  92.       pw.println("<TR><TD>Subject:</TD><TD>" + getSubject() + "</TD></TR>");
  93.       pw.println("<TR><TD>Size:</TD><TD>" + getSize() + "</TD></TR>");
  94.       pw.println("<TR><TD>Flags:</TD><TD>" + getFlags() + "</TD></TR>");
  95.       pw.println("<TR><TD VALIGN>Message:</TD><TD>" + getMessageText()
  96.                  + "</TD></TR>");
  97.       String enclosure = getEnclosureName();
  98.       pw.print("<TR><TD>Enclosure:</TD><TD>" + enclosure + "</TD></TR>");
  99.       pw.print("<TR><TD><BR><A HREF='message?cmd=delete&folder=" + folderName
  100.                + "&msgid=" + msgid + "'>Delete</A></TD></TR>");
  101.       pw.println("</TABLE>");
  102.       folder.close(false);
  103.       store.close();
  104.     } catch (Exception e) {
  105.       pw.println("<BR><BR><STRONG>" + e.getMessage() + "</STRONG><BR>");
  106.       e.printStackTrace(pw);
  107.     }
  108.     pw.println("</BODY></HTML>");
  109.   }
  110.   private void deleteMessage() {
  111.     try {
  112.       getMessage();
  113.       message.setFlag(Flags.Flag.DELETED, true);
  114.     } catch (Exception e) {}
  115.   }
  116.   /**
  117.    * Method getSent
  118.    *
  119.    *
  120.    * @return
  121.    *
  122.    * @throws MessagingException
  123.    *
  124.    */
  125.   public String getSent() throws MessagingException {
  126.     Date sentDate = message.getSentDate();
  127.     return DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
  128.                                           DateFormat.SHORT).format(sentDate);
  129.   }
  130.   /**
  131.    * Method getReceived
  132.    *
  133.    *
  134.    * @return
  135.    *
  136.    * @throws MessagingException
  137.    *
  138.    */
  139.   public String getReceived() throws MessagingException {
  140.     String date         = "";
  141.     Date   receivedDate = message.getReceivedDate();
  142.     if (receivedDate != null) {
  143.       date =
  144.         DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
  145.                                        DateFormat.SHORT).format(receivedDate);
  146.     }
  147.     return date;
  148.   }
  149.   /**
  150.    * Method getFrom
  151.    *
  152.    *
  153.    * @return
  154.    *
  155.    * @throws MessagingException
  156.    *
  157.    */
  158.   public String getFrom() throws MessagingException {
  159.     Address[] addresses = message.getFrom();
  160.     return addresses [0].toString();
  161.   }
  162.   /**
  163.    * Method getReplyTo
  164.    *
  165.    *
  166.    * @return
  167.    *
  168.    * @throws MessagingException
  169.    *
  170.    */
  171.   public String getReplyTo() throws MessagingException {
  172.     StringBuffer sb        = new StringBuffer();
  173.     Address[]    addresses = message.getReplyTo();
  174.     if (addresses != null) {
  175.       for (int j = 0; j < addresses.length; j++) {
  176.         sb.append(addresses [j].toString() + " ");
  177.       }
  178.     }
  179.     return sb.toString();
  180.   }
  181.   /**
  182.    * Method getTo
  183.    *
  184.    *
  185.    * @return
  186.    *
  187.    * @throws MessagingException
  188.    *
  189.    */
  190.   public String getTo() throws MessagingException {
  191.     StringBuffer sb        = new StringBuffer();
  192.     Address[]    addresses = message.getRecipients(Message.RecipientType.TO);
  193.     if (addresses != null) {
  194.       for (int j = 0; j < addresses.length; j++) {
  195.         sb.append(addresses [j].toString() + " ");
  196.       }
  197.     }
  198.     return sb.toString();
  199.   }
  200.   /**
  201.    * Method getCc
  202.    *
  203.    *
  204.    * @return
  205.    *
  206.    * @throws MessagingException
  207.    *
  208.    */
  209.   public String getCc() throws MessagingException {
  210.     StringBuffer sb        = new StringBuffer();
  211.     Address[]    addresses = message.getRecipients(Message.RecipientType.CC);
  212.     if (addresses != null) {
  213.       for (int j = 0; j < addresses.length; j++) {
  214.         sb.append(addresses [j].toString() + " ");
  215.       }
  216.     }
  217.     return sb.toString();
  218.   }
  219.   /**
  220.    * Method getSubject
  221.    *
  222.    *
  223.    * @return
  224.    *
  225.    * @throws MessagingException
  226.    *
  227.    */
  228.   public String getSubject() throws MessagingException {
  229.     return message.getSubject();
  230.   }
  231.   private String getSize() throws MessagingException {
  232.     int    size     = message.getSize();
  233.     String sizeDesc = size + " B";
  234.     if (size >= 1024) {
  235.       size     /= 1024;
  236.       sizeDesc = size + " KB";
  237.       if (size >= 1024) {
  238.         size     /= 1024;
  239.         sizeDesc = size + " MB";
  240.       }
  241.     }
  242.     return sizeDesc;
  243.   }
  244.   private String getFlags() throws MessagingException {
  245.     Flags        flags    = message.getFlags();
  246.     StringBuffer sb       = new StringBuffer();
  247.     Flags.Flag[] sysFlags = flags.getSystemFlags();
  248.     for (int i = 0; i < sysFlags.length; i++) {
  249.       if (sysFlags [i] == Flags.Flag.ANSWERED) {
  250.         sb.append("Answered ");
  251.       } else if (sysFlags [i] == Flags.Flag.DELETED) {
  252.         sb.append("Deleted ");
  253.       } else if (sysFlags [i] == Flags.Flag.DRAFT) {
  254.         sb.append("Draft ");
  255.       } else if (sysFlags [i] == Flags.Flag.FLAGGED) {
  256.         sb.append("Flagged ");
  257.       } else if (sysFlags [i] == Flags.Flag.RECENT) {
  258.         sb.append("Recent ");
  259.       } else if (sysFlags [i] == Flags.Flag.SEEN) {
  260.         sb.append("Seen ");
  261.       } else if (sysFlags [i] == Flags.Flag.USER) {
  262.         sb.append("User ");
  263.       } else {
  264.         sb.append("Unknown ");
  265.       }
  266.     }
  267.     String[] userFlags = flags.getUserFlags();
  268.     for (int i = 0; i < userFlags.length; i++) {
  269.       sb.append(userFlags [i].toString() + " ");
  270.     }
  271.     return sb.toString();
  272.   }
  273.   /**
  274.    * Method getMessageText
  275.    *
  276.    *
  277.    * @return
  278.    *
  279.    * @throws IOException
  280.    * @throws MessagingException
  281.    *
  282.    */
  283.   public String getMessageText() throws IOException, MessagingException {
  284.     String text = "";
  285.     if (message.isMimeType("text/plain")) {
  286.       text = (String) message.getContent();
  287.     } else if (message.isMimeType("multipart/*")) {
  288.       Multipart mp = (Multipart) message.getContent();
  289.       BodyPart  bp = mp.getBodyPart(0);
  290.       if (bp.isMimeType("text/plain") | bp.isMimeType("text/html")) {
  291.         text = (String) bp.getContent();
  292.       }
  293.     }
  294.     return text;
  295.   }
  296.   private String getEnclosureName() throws MessagingException, IOException {
  297.     StringBuffer sb = new StringBuffer();
  298.     if (message.isMimeType("multipart/*")) {
  299.       Multipart mp    = (Multipart) message.getContent();
  300.       int       count = mp.getCount();
  301.       for (int i = 0; i < count; i++) {
  302.         BodyPart bp = mp.getBodyPart(i);
  303.         if (bp.getFileName() != null) {
  304.           sb.append(bp.getFileName() + " ");
  305.         }
  306.       }
  307.     }
  308.     return sb.toString();
  309.   }
  310. }
  311. /*--- Formatted in Bible Style on Thu, Sep 6, '01 ---*/
  312. /*------ Formatted by Jindent 3.24 Gold 1.02 --- http://www.jindent.de ------*/