📄 javamailservlet.java
字号:
/* * @(#)JavaMailServlet.java 1.5 01/05/23 * * Copyright 1998, 1999 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.io.*;import java.util.*;import java.text.*;import javax.servlet.*;import javax.servlet.http.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;/** * This is a servlet that demonstrates the use of JavaMail APIs * in a 3-tier application. It allows the user to login to an * IMAP store, list all the messages in the INBOX folder, view * selected messages, compose and send a message, and logout. * <p> * Please note: This is NOT an example of how to write servlets! * This is simply to show that JavaMail can be used in a servlet. * <p> * For more information on this servlet, see the * JavaMailServlet.README.txt file. * <p> * For more information on servlets, see * <a href="http://java.sun.com/products/java-server/servlets/index.html"> * http://java.sun.com/products/java-server/servlets/index.html</a> * * @author Max Spivak */public class JavaMailServlet extends HttpServlet implements SingleThreadModel { String protocol = "imap"; String mbox = "INBOX"; /** * This method handles the "POST" submission from two forms: the * login form and the message compose form. The login form has the * following parameters: <code>hostname</code>, <code>username</code>, * and <code>password</code>. The <code>send</code> parameter denotes * that the method is processing the compose form submission. */ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // get the session HttpSession ssn = req.getSession(true); String send = req.getParameter("send"); String host = req.getParameter("hostname"); String user = req.getParameter("username"); String passwd = req.getParameter("password"); URLName url = new URLName(protocol, host, -1, mbox, user, passwd); ServletOutputStream out = res.getOutputStream(); res.setContentType("text/html"); out.println("<html><body bgcolor=\"#CCCCFF\">"); if (send != null) { // process message sending send(req, res, out, ssn); } else { // initial login // create MailUserData mud = new MailUserData(url); ssn.putValue("javamailservlet", mud); try { Properties props = System.getProperties(); props.put("mail.smtp.host", host); Session session = Session.getDefaultInstance(props, null); session.setDebug(false); Store store = session.getStore(url); store.connect(); Folder folder = store.getDefaultFolder(); if (folder == null) throw new MessagingException("No default folder"); folder = folder.getFolder(mbox); if (folder == null) throw new MessagingException("Invalid folder"); folder.open(Folder.READ_WRITE); int totalMessages = folder.getMessageCount(); Message[] msgs = folder.getMessages(); FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.ENVELOPE); folder.fetch(msgs, fp); // track who logged in System.out.println("Login from: " + store.getURLName()); // save stuff into MUD mud.setSession(session); mud.setStore(store); mud.setFolder(folder); // splash out.print("<center>"); out.print("<font face=\"Arial,Helvetica\" font size=+3>"); out.println("<b>Welcome to JavaMail!</b></font></center><p>"); // folder table out.println("<table width=\"50%\" border=0 align=center>"); // folder name column header out.print("<tr><td width=\"75%\" bgcolor=\"#ffffcc\">"); out.print("<font face=\"Arial,Helvetica\" font size=-1>"); out.println("<b>FolderName</b></font></td><br>"); // msg count column header out.print("<td width=\"25%\" bgcolor=\"#ffffcc\">"); out.print("<font face=\"Arial,Helvetica\" font size=-1>"); out.println("<b>Messages</b></font></td><br>"); out.println("</tr>"); // folder name out.print("<tr><td width=\"75%\" bgcolor=\"#ffffff\">"); out.print("<a href=\"" + HttpUtils.getRequestURL(req) + "\">" + "Inbox" + "</a></td><br>"); // msg count out.println("<td width=\"25%\" bgcolor=\"#ffffff\">" + totalMessages + "</td>"); out.println("</tr>"); out.println("</table"); } catch (Exception ex) { out.println(ex.toString()); } finally { out.println("</body></html>"); out.close(); } } } /** * This method handles the GET requests for the client. */ public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession ses = req.getSession(false); // before we write to out ServletOutputStream out = res.getOutputStream(); MailUserData mud = getMUD(ses); if (mud == null) { res.setContentType("text/html"); out.println("<html><body>Please Login (no session)</body></html>"); out.close(); return; } if (!mud.getStore().isConnected()) { res.setContentType("text/html"); out.println("<html><body>Not Connected To Store</body></html>"); out.close(); return; } // mux that takes a GET request, based on parameters figures // out what it should do, and routes it to the // appropriate method // get url parameters String msgStr = req.getParameter("message"); String logout = req.getParameter("logout"); String compose = req.getParameter("compose"); String part = req.getParameter("part"); int msgNum = -1; int partNum = -1; // process url params if (msgStr != null) { // operate on message "msgStr" msgNum = Integer.parseInt(msgStr); if (part == null) { // display message "msgStr" res.setContentType("text/html"); displayMessage(mud, req, out, msgNum); } else if (part != null) { // display part "part" in message "msgStr" partNum = Integer.parseInt(part); displayPart(mud, msgNum, partNum, out, res); } } else if (compose != null) { // display compose form compose(mud, res, out); } else if (logout != null) { // process logout try { mud.getFolder().close(false); mud.getStore().close(); ses.invalidate(); out.println("<html><body>Logged out OK</body></html>"); } catch (MessagingException mex) { out.println(mex.toString()); } } else { // display headers displayHeaders(mud, req, out); } } /* main method to display messages */ private void displayMessage(MailUserData mud, HttpServletRequest req, ServletOutputStream out, int msgNum) throws IOException { out.println("<html>"); out.println("<HEAD><TITLE>JavaMail Servlet</TITLE></HEAD>"); out.println("<BODY bgcolor=\"#ccccff\">"); out.print("<center><font face=\"Arial,Helvetica\" "); out.println("font size=\"+3\"><b>"); out.println("Message " + (msgNum+1) + " in folder " + mud.getStore().getURLName() + "/INBOX</b></font></center><p>"); try { Message msg = mud.getFolder().getMessage(msgNum); // first, display this message's headers displayMessageHeaders(mud, msg, out); // and now, handle the content Object o = msg.getContent(); //if (o instanceof String) { if (msg.isMimeType("text/plain")) { out.println("<pre>"); out.println((String)o); out.println("</pre>"); //} else if (o instanceof Multipart){ } else if (msg.isMimeType("multipart/*")) { Multipart mp = (Multipart)o; int cnt = mp.getCount(); for (int i = 0; i < cnt; i++) { displayPart(mud, msgNum, mp.getBodyPart(i), i, req, out); } } else { out.println(msg.getContentType()); } } catch (MessagingException mex) { out.println(mex.toString()); } out.println("</BODY></html>"); out.close(); } /** * This method displays a message part. <code>text/plain</code> * content parts are displayed inline. For all other parts, * a URL is generated and displayed; clicking on the URL * brings up the part in a separate page. */ private void displayPart(MailUserData mud, int msgNum, Part part, int partNum, HttpServletRequest req, ServletOutputStream out) throws IOException { if (partNum != 0) out.println("<p><hr>"); try { String sct = part.getContentType(); if (sct == null) { out.println("invalid part"); return; } ContentType ct = new ContentType(sct); if (partNum != 0) out.println("<b>Attachment Type:</b> " + ct.getBaseType() + "<br>"); if (ct.match("text/plain")) { // display text/plain inline out.println("<pre>"); out.println((String)part.getContent()); out.println("</pre>"); } else { // generate a url for this part String s; if ((s = part.getFileName()) != null) out.println("<b>Filename:</b> " + s + "<br>"); s = null; if ((s = part.getDescription()) != null) out.println("<b>Description:</b> " + s + "<br>"); out.println("<a href=\"" + HttpUtils.getRequestURL(req) + "?message=" + msgNum + "&part=" + partNum + "\">Display Attachment</a>"); } } catch (MessagingException mex) { out.println(mex.toString()); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -