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

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)JavaMailServlet.java 1.5 01/05/23
  3.  *
  4.  * Copyright 1998, 1999 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 java.text.*;
  41. import javax.servlet.*;
  42. import javax.servlet.http.*;
  43. import javax.mail.*;
  44. import javax.mail.internet.*;
  45. import javax.activation.*;
  46. /**
  47.  * This is a servlet that demonstrates the use of JavaMail APIs
  48.  * in a 3-tier application. It allows the user to login to an 
  49.  * IMAP store, list all the messages in the INBOX folder, view
  50.  * selected messages, compose and send a message, and logout.
  51.  * <p>
  52.  * Please note: This is NOT an example of how to write servlets! 
  53.  * This is simply to show that JavaMail can be used in a servlet.
  54.  * <p>
  55.  * For more information on this servlet, see the 
  56.  * JavaMailServlet.README.txt file. 
  57.  * <p>
  58.  * For more information on servlets, see 
  59.  * <a href="http://java.sun.com/products/java-server/servlets/index.html">
  60.  * http://java.sun.com/products/java-server/servlets/index.html</a>
  61.  *
  62.  * @author Max Spivak
  63.  */
  64. public class JavaMailServlet extends HttpServlet implements SingleThreadModel {
  65.     String protocol = "imap";
  66.     String mbox = "INBOX";
  67.     /**
  68.      * This method handles the "POST" submission from two forms: the
  69.      * login form and the message compose form. The login form has the
  70.      * following parameters: <code>hostname</code>, <code>username</code>,
  71.      * and <code>password</code>. The <code>send</code> parameter denotes
  72.      * that the method is processing the compose form submission.
  73.      */
  74.     public  void doPost(HttpServletRequest req, HttpServletResponse res)
  75. throws ServletException, IOException {
  76.         // get the session
  77. HttpSession ssn = req.getSession(true);
  78. String send = req.getParameter("send");
  79.         String host = req.getParameter("hostname");
  80.         String user = req.getParameter("username");
  81.         String passwd = req.getParameter("password");
  82.         URLName url = new URLName(protocol, host, -1, mbox, user, passwd);
  83.         ServletOutputStream out = res.getOutputStream();
  84. res.setContentType("text/html");
  85. out.println("<html><body bgcolor="#CCCCFF">");
  86. if (send != null) {
  87.     // process message sending
  88.     send(req, res, out, ssn);
  89. } else {
  90.     // initial login
  91.     // create 
  92.     MailUserData mud = new MailUserData(url);
  93.     ssn.putValue("javamailservlet", mud);
  94.     
  95.     try {
  96. Properties props = System.getProperties();
  97. props.put("mail.smtp.host", host);
  98. Session session = Session.getDefaultInstance(props, null);
  99. session.setDebug(false);
  100. Store store = session.getStore(url);
  101. store.connect();
  102. Folder folder = store.getDefaultFolder();
  103. if (folder == null) 
  104.     throw new MessagingException("No default folder");
  105. folder = folder.getFolder(mbox);
  106. if (folder == null)
  107.     throw new MessagingException("Invalid folder");
  108. folder.open(Folder.READ_WRITE);
  109. int totalMessages = folder.getMessageCount();
  110. Message[] msgs = folder.getMessages();
  111. FetchProfile fp = new FetchProfile();
  112. fp.add(FetchProfile.Item.ENVELOPE);
  113. folder.fetch(msgs, fp);
  114. // track who logged in
  115. System.out.println("Login from: " + store.getURLName());
  116. // save stuff into MUD
  117. mud.setSession(session);
  118. mud.setStore(store);
  119. mud.setFolder(folder);
  120. // splash
  121. out.print("<center>");
  122. out.print("<font face="Arial,Helvetica" font size=+3>");
  123. out.println("<b>Welcome to JavaMail!</b></font></center><p>");
  124. // folder table
  125. out.println("<table width="50%" border=0 align=center>");
  126. // folder name column header
  127. out.print("<tr><td width="75%" bgcolor="#ffffcc">");
  128. out.print("<font face="Arial,Helvetica" font size=-1>");
  129. out.println("<b>FolderName</b></font></td><br>");
  130. // msg count column header
  131. out.print("<td width="25%" bgcolor="#ffffcc">");
  132. out.print("<font face="Arial,Helvetica" font size=-1>");
  133. out.println("<b>Messages</b></font></td><br>");
  134. out.println("</tr>");
  135. // folder name
  136. out.print("<tr><td width="75%" bgcolor="#ffffff">");
  137. out.print("<a href="" + HttpUtils.getRequestURL(req) + "">" +
  138.   "Inbox" + "</a></td><br>");
  139. // msg count
  140. out.println("<td width="25%" bgcolor="#ffffff">" + 
  141.     totalMessages + "</td>");
  142. out.println("</tr>");
  143. out.println("</table");
  144.     } catch (Exception ex) {
  145. out.println(ex.toString());            
  146.     } finally {
  147. out.println("</body></html>");
  148. out.close();
  149.     }
  150. }
  151.     }
  152.     /**
  153.      * This method handles the GET requests for the client.
  154.      */
  155.     public void doGet (HttpServletRequest req, HttpServletResponse res)
  156. throws ServletException, IOException {
  157.         HttpSession ses = req.getSession(false); // before we write to out
  158.         ServletOutputStream out = res.getOutputStream();
  159. MailUserData mud = getMUD(ses);
  160. if (mud == null) {
  161.     res.setContentType("text/html");
  162.     out.println("<html><body>Please Login (no session)</body></html>");
  163.     out.close();
  164.     return;
  165. }
  166. if (!mud.getStore().isConnected()) {
  167.     res.setContentType("text/html");
  168.     out.println("<html><body>Not Connected To Store</body></html>");
  169.     out.close();
  170.     return;
  171. }
  172. // mux that takes a GET request, based on parameters figures
  173. // out what it should do, and routes it to the
  174. // appropriate method
  175. // get url parameters
  176. String msgStr = req.getParameter("message");
  177.         String logout = req.getParameter("logout");
  178. String compose = req.getParameter("compose");
  179. String part = req.getParameter("part");
  180. int msgNum = -1;
  181. int partNum = -1;
  182. // process url params
  183. if (msgStr != null) {
  184.     // operate on message "msgStr"
  185.     msgNum = Integer.parseInt(msgStr);
  186.     if (part == null) {
  187. // display message "msgStr"
  188.                 res.setContentType("text/html");
  189. displayMessage(mud, req, out, msgNum);
  190.     } else if (part != null) {
  191. // display part "part" in message "msgStr"
  192. partNum = Integer.parseInt(part);
  193.                 displayPart(mud, msgNum, partNum, out, res);
  194.     }
  195. } else if (compose != null) {
  196.     // display compose form
  197.     compose(mud, res, out);
  198.         } else if (logout != null) {
  199.     // process logout
  200.             try {
  201.                 mud.getFolder().close(false);
  202.                 mud.getStore().close();
  203. ses.invalidate();
  204.                 out.println("<html><body>Logged out OK</body></html>");
  205.             } catch (MessagingException mex) {
  206.                 out.println(mex.toString());
  207.             }
  208. } else {
  209.     // display headers
  210.     displayHeaders(mud, req, out);
  211. }
  212.     }
  213.     /* main method to display messages */
  214.     private void displayMessage(MailUserData mud, HttpServletRequest req, 
  215. ServletOutputStream out, int msgNum) 
  216. throws IOException {
  217.     
  218. out.println("<html>");
  219.         out.println("<HEAD><TITLE>JavaMail Servlet</TITLE></HEAD>");
  220. out.println("<BODY bgcolor="#ccccff">");
  221. out.print("<center><font face="Arial,Helvetica" ");
  222. out.println("font size="+3"><b>");
  223. out.println("Message " + (msgNum+1) + " in folder " + 
  224.     mud.getStore().getURLName() + 
  225.     "/INBOX</b></font></center><p>");
  226. try {
  227.     Message msg = mud.getFolder().getMessage(msgNum);
  228.     // first, display this message's headers
  229.     displayMessageHeaders(mud, msg, out);
  230.     // and now, handle the content
  231.     Object o = msg.getContent();
  232.             
  233.     //if (o instanceof String) {
  234.     if (msg.isMimeType("text/plain")) {
  235. out.println("<pre>");
  236. out.println((String)o);
  237. out.println("</pre>");
  238.     //} else if (o instanceof Multipart){
  239.     } else if (msg.isMimeType("multipart/*")) {
  240. Multipart mp = (Multipart)o;
  241. int cnt = mp.getCount();
  242. for (int i = 0; i < cnt; i++) {
  243.     displayPart(mud, msgNum, mp.getBodyPart(i), i, req, out);
  244. }
  245.     } else {
  246. out.println(msg.getContentType());
  247.     }
  248. } catch (MessagingException mex) {
  249.     out.println(mex.toString());
  250. }
  251. out.println("</BODY></html>");
  252. out.close();
  253.     }
  254.     /** 
  255.      * This method displays a message part. <code>text/plain</code>
  256.      * content parts are displayed inline. For all other parts,
  257.      * a URL is generated and displayed; clicking on the URL
  258.      * brings up the part in a separate page.
  259.      */
  260.     private void displayPart(MailUserData mud, int msgNum, Part part, 
  261.      int partNum, HttpServletRequest req, 
  262.      ServletOutputStream out) 
  263. throws IOException {
  264. if (partNum != 0)
  265.     out.println("<p><hr>");
  266.         try {
  267.     String sct = part.getContentType();
  268.     if (sct == null) {
  269. out.println("invalid part");
  270. return;
  271.     }
  272.     ContentType ct = new ContentType(sct);
  273.     
  274.     if (partNum != 0)
  275. out.println("<b>Attachment Type:</b> " +   
  276.     ct.getBaseType() + "<br>");
  277.     if (ct.match("text/plain")) {  
  278. // display text/plain inline
  279. out.println("<pre>");
  280. out.println((String)part.getContent());
  281. out.println("</pre>");
  282.     } else {
  283. // generate a url for this part
  284. String s;
  285. if ((s = part.getFileName()) != null)
  286.     out.println("<b>Filename:</b> " + s + "<br>");
  287. s = null;
  288. if ((s = part.getDescription()) != null)
  289.     out.println("<b>Description:</b> " + s + "<br>");
  290. out.println("<a href="" +
  291.     HttpUtils.getRequestURL(req) + 
  292.     "?message=" +
  293.     msgNum + "&part=" +
  294.     partNum + "">Display Attachment</a>");
  295.     }
  296. } catch (MessagingException mex) {
  297.     out.println(mex.toString());
  298. }
  299.     }
  300.     /**
  301.      * This method gets the stream from for a given msg part and 
  302.      * pushes it out to the browser with the correct content type.
  303.      * Used to display attachments and relies on the browser's
  304.      * content handling capabilities.
  305.      */
  306.     private void displayPart(MailUserData mud, int msgNum,
  307.      int partNum, ServletOutputStream out, 
  308.      HttpServletResponse res) 
  309. throws IOException {
  310. Part part = null;
  311.         try {
  312.     Message msg = mud.getFolder().getMessage(msgNum);
  313.     Multipart mp = (Multipart)msg.getContent();
  314.     part = mp.getBodyPart(partNum);
  315.     
  316.     String sct = part.getContentType();
  317.     if (sct == null) {
  318. out.println("invalid part");
  319. return;
  320.     }
  321.     ContentType ct = new ContentType(sct);
  322.     res.setContentType(ct.getBaseType());
  323.     InputStream is = part.getInputStream();
  324.     int i;
  325.     while ((i = is.read()) != -1)
  326. out.write(i);
  327.     out.flush();
  328.     out.close();
  329. } catch (MessagingException mex) {
  330.     out.println(mex.toString());
  331. }
  332.     }
  333.     /**
  334.      * This is a utility message that pretty-prints the message 
  335.      * headers for message that is being displayed.
  336.      */
  337.     private void displayMessageHeaders(MailUserData mud, Message msg, 
  338.        ServletOutputStream out) 
  339. throws IOException {
  340. try {
  341.     out.println("<b>Date:</b> " + msg.getSentDate() + "<br>");
  342.             Address[] fr = msg.getFrom();
  343.             if (fr != null) {
  344.                 boolean tf = true;
  345.                 out.print("<b>From:</b> ");
  346.                 for (int i = 0; i < fr.length; i++) {
  347.                     out.print(((tf) ? " " : ", ") + getDisplayAddress(fr[i]));
  348.                     tf = false;
  349.                 }
  350.                 out.println("<br>");
  351.             }
  352.             Address[] to = msg.getRecipients(Message.RecipientType.TO);
  353.             if (to != null) {
  354.                 boolean tf = true;
  355.                 out.print("<b>To:</b> ");
  356.                 for (int i = 0; i < to.length; i++) {
  357.                     out.print(((tf) ? " " : ", ") + getDisplayAddress(to[i]));
  358.                     tf = false;
  359.                 }
  360.                 out.println("<br>");
  361.             }
  362.             Address[] cc = msg.getRecipients(Message.RecipientType.CC);
  363.             if (cc != null) {
  364.                 boolean cf = true;
  365.                 out.print("<b>CC:</b> ");
  366.                 for (int i = 0; i < cc.length; i++) {
  367.                     out.print(((cf) ? " " : ", ") + getDisplayAddress(cc[i]));
  368.     cf = false;
  369. }
  370.                 out.println("<br>");
  371.             }
  372.             
  373.     out.print("<b>Subject:</b> " + 
  374.       ((msg.getSubject() !=null) ? msg.getSubject() : "") + 
  375.       "<br>");
  376.         } catch (MessagingException mex) {
  377.     out.println(msg.toString());
  378. }
  379.     }
  380.     /**
  381.      * This method displays the URL's for the available commands and the
  382.      * INBOX headerlist 
  383.      */
  384.     private void displayHeaders(MailUserData mud,
  385. HttpServletRequest req, 
  386.                                 ServletOutputStream out)
  387. throws IOException {
  388.         SimpleDateFormat df = new SimpleDateFormat("EE M/d/yy");
  389.         out.println("<html>");
  390.         out.println("<HEAD><TITLE>JavaMail Servlet</TITLE></HEAD>");
  391. out.println("<BODY bgcolor="#ccccff"><hr>");
  392. out.print("<center><font face="Arial,Helvetica" font size="+3">");
  393. out.println("<b>Folder " + mud.getStore().getURLName() + 
  394.     "/INBOX</b></font></center><p>");
  395. // URL's for the commands that are available
  396. out.println("<font face="Arial,Helvetica" font size="+3"><b>");
  397.         out.println("<a href="" +
  398.     HttpUtils.getRequestURL(req) +
  399.     "?logout=true">Logout</a>");
  400.         out.println("<a href="" +
  401.     HttpUtils.getRequestURL(req) +
  402.     "?compose=true" target="compose">Compose</a>");
  403. out.println("</b></font>");
  404. out.println("<hr>");
  405. // List headers in a table
  406.         out.print("<table cellpadding=1 cellspacing=1 "); // table
  407. out.println("width="100%" border=1>");          // settings
  408. // sender column header
  409. out.println("<tr><td width="25%" bgcolor="ffffcc">");
  410. out.println("<font face="Arial,Helvetica" font size="+1">");
  411. out.println("<b>Sender</b></font></td>");
  412. // date column header
  413. out.println("<td width="15%" bgcolor="ffffcc">");
  414. out.println("<font face="Arial,Helvetica" font size="+1">");
  415. out.println("<b>Date</b></font></td>");
  416. // subject column header
  417. out.println("<td bgcolor="ffffcc">");
  418. out.println("<font face="Arial,Helvetica" font size="+1">");
  419. out.println("<b>Subject</b></font></td></tr>");
  420. try {
  421.     Folder f = mud.getFolder();
  422.     int msgCount = f.getMessageCount();
  423.     Message m = null;
  424.     // for each message, show its headers
  425.     for (int i = 1; i <= msgCount; i++) {
  426.                 m = f.getMessage(i);
  427. // if message has the DELETED flag set, don't display it
  428. if (m.isSet(Flags.Flag.DELETED))
  429.     continue;
  430. // from 
  431.                 out.println("<tr valigh=middle>");
  432.                 out.print("<td width="25%" bgcolor="ffffff">");
  433. out.println("<font face="Arial,Helvetica">" + 
  434.     ((m.getFrom() != null) ? 
  435.                m.getFrom()[0].toString() : 
  436.                "" ) +
  437.     "</font></td>");
  438. // date
  439.                 out.print("<td nowrap width="15%" bgcolor="ffffff">");
  440. out.println("<font face="Arial,Helvetica">" + 
  441.                             df.format((m.getSentDate()!=null) ? 
  442.       m.getSentDate() : m.getReceivedDate()) +
  443.     "</font></td>");
  444. // subject & link
  445.                 out.print("<td bgcolor="ffffff">");
  446. out.println("<font face="Arial,Helvetica">" + 
  447.             "<a href="" +
  448.     HttpUtils.getRequestURL(req) + 
  449.                             "?message=" +
  450.                             i + "">" +
  451.                             ((m.getSubject() != null) ? 
  452.            m.getSubject() :
  453.            "<i>No Subject</i>") +
  454.                             "</a>" +
  455.                             "</font></td>");
  456.                 out.println("</tr>");
  457.     }
  458. } catch (MessagingException mex) {
  459.     out.println("<tr><td>" + mex.toString() + "</td></tr>");
  460.     mex.printStackTrace();
  461. }
  462. out.println("</table>");
  463. out.println("</BODY></html>");
  464. out.flush();
  465. out.close();
  466.     }
  467.     /** 
  468.      * This method handles the request when the user hits the
  469.      * <i>Compose</i> link. It send the compose form to the browser.
  470.      */
  471.     private void compose(MailUserData mud, HttpServletResponse res,
  472.  ServletOutputStream out) 
  473. throws IOException {
  474. res.setContentType("text/html");
  475. out.println(composeForm);
  476. out.close();
  477.     }
  478.     /**
  479.      * This method processes the send request from the compose form
  480.      */
  481.     private void send(HttpServletRequest req, HttpServletResponse res,
  482.       ServletOutputStream out, HttpSession ssn)
  483. throws IOException {
  484.     
  485.         String to = req.getParameter("to");
  486. String cc = req.getParameter("cc");
  487. String subj = req.getParameter("subject");
  488. String text = req.getParameter("text");
  489. try {
  490.     MailUserData mud = getMUD(ssn);
  491.     if (mud == null)
  492. throw new Exception("trying to send, but not logged in");
  493.     Message msg = new MimeMessage(mud.getSession());
  494.     InternetAddress[] toAddrs = null, ccAddrs = null;
  495.     if (to != null) {
  496. toAddrs = InternetAddress.parse(to, false);
  497. msg.setRecipients(Message.RecipientType.TO, toAddrs);
  498.     } else
  499. throw new MessagingException("No "To" address specified");
  500.     if (cc != null) {
  501. ccAddrs = InternetAddress.parse(cc, false);
  502. msg.setRecipients(Message.RecipientType.CC, ccAddrs);
  503.     }
  504.     if (subj != null)
  505. msg.setSubject(subj);
  506.     URLName u = mud.getURLName();
  507.     msg.setFrom(new InternetAddress(u.getUsername() + "@" +
  508.     u.getHost()));
  509.     if (text != null)
  510. msg.setText(text);
  511.     Transport.send(msg);
  512.     
  513.     out.println("<h1>Message sent successfully</h1></body></html>");
  514.     out.close();
  515.     
  516. } catch (Exception mex) {
  517.     out.println("<h1>Error sending message.</h1>");
  518.     out.println(mex.toString());
  519.     out.println("<br></body></html>");
  520. }
  521.     }
  522.     // utility method; returns a string suitable for msg header display
  523.     private String getDisplayAddress(Address a) {
  524.         String pers = null;
  525.         String addr = null;
  526.         if (a instanceof InternetAddress &&
  527.             ((pers = ((InternetAddress)a).getPersonal()) != null)) {
  528.     
  529.     addr = pers + "  "+"&lt;"+((InternetAddress)a).getAddress()+"&gt;";
  530.         } else 
  531.             addr = a.toString();
  532.         
  533.         return addr;
  534.     }
  535.     // utility method; retrieve the MailUserData 
  536.     // from the HttpSession and return it
  537.     private MailUserData getMUD(HttpSession ses) throws IOException {
  538. MailUserData mud = null;
  539. if (ses == null) {
  540.     return null;
  541. } else {
  542.     if ((mud = (MailUserData)ses.getValue("javamailservlet")) == null){
  543. return null;
  544.     }
  545. }
  546. return mud;
  547.     }
  548.     public String getServletInfo() {
  549.         return "A mail reader servlet";
  550.     }
  551.     /**
  552.      * This is the HTML code for the compose form. Another option would
  553.      * have been to use a separate html page.
  554.      */
  555.     private static String composeForm = "<HTML><HEAD><TITLE>JavaMail Compose</TITLE></HEAD><BODY BGCOLOR="#CCCCFF"><FORM ACTION="/servlet/JavaMailServlet" METHOD="POST"><input type="hidden" name="send" value="send"><P ALIGN="CENTER"><B><FONT SIZE="4" FACE="Verdana, Arial, Helvetica">JavaMail Compose Message</FONT></B><P><TABLE BORDER="0" WIDTH="100%"><TR><TD WIDTH="16%" HEIGHT="22"> <P ALIGN="RIGHT"><B><FONT FACE="Verdana, Arial, Helvetica">To:</FONT></B></TD><TD WIDTH="84%" HEIGHT="22"><INPUT TYPE="TEXT" NAME="to" SIZE="30"> <FONT SIZE="1" FACE="Verdana, Arial, Helvetica"> (separate addresses with commas)</FONT></TD></TR><TR><TD WIDTH="16%"><P ALIGN="RIGHT"><B><FONT FACE="Verdana, Arial, Helvetica">CC:</FONT></B></TD><TD WIDTH="84%"><INPUT TYPE="TEXT" NAME="cc" SIZE="30"> <FONT SIZE="1" FACE="Verdana, Arial, Helvetica"> (separate addresses with commas)</FONT></TD></TR><TR><TD WIDTH="16%"><P ALIGN="RIGHT"><B><FONT FACE="Verdana, Arial, Helvetica">Subject:</FONT></B></TD><TD WIDTH="84%"><INPUT TYPE="TEXT" NAME="subject" SIZE="55"></TD></TR><TR><TD WIDTH="16%">&nbsp;</TD><TD WIDTH="84%"><TEXTAREA NAME="text" ROWS="15" COLS="53"></TEXTAREA></TD></TR><TR><TD WIDTH="16%" HEIGHT="32">&nbsp;</TD><TD WIDTH="84%" HEIGHT="32"><INPUT TYPE="SUBMIT" NAME="Send" VALUE="Send"><INPUT TYPE="RESET" NAME="Reset" VALUE="Reset"></TD></TR></TABLE></FORM></BODY></HTML>";
  556. }
  557. /**
  558.  * This class is used to store session data for each user's session. It
  559.  * is stored in the HttpSession.
  560.  */
  561. class MailUserData {
  562.     URLName url;
  563.     Session session;
  564.     Store store;
  565.     Folder folder;
  566.     public MailUserData(URLName urlname) {
  567. url = urlname;
  568.     }
  569.     public URLName getURLName() {
  570. return url;
  571.     }
  572.     public Session getSession() {
  573. return session;
  574.     }
  575.     public void setSession(Session s) {
  576. session = s;
  577.     }
  578.     public Store getStore() {
  579. return store;
  580.     }
  581.     public void setStore(Store s) {
  582. store = s;
  583.     }
  584.     public Folder getFolder() {
  585. return folder;
  586.     }
  587.     public void setFolder(Folder f) {
  588. folder = f;
  589.     }
  590. }