Java tutorial
/* ShowMessageSourceServlet.java Copyright (c) 2009 Juergen Schlierf, All Rights Reserved This file is part of Cubusmail (http://code.google.com/p/cubusmail/). This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Cubusmail. If not, see <http://www.gnu.org/licenses/>. */ package com.cubusmail.gwtui.server.services; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import javax.mail.Header; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.internet.ContentType; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.cubusmail.core.CubusConstants; import com.cubusmail.mail.IMailbox; import com.cubusmail.mail.SessionManager; /** * Servlet for showing the message source. * * @author Juergen Schlierf */ public class ShowMessageSourceServlet extends HttpServlet { private Log logger = LogFactory.getLog(this.getClass()); /** * */ private static final long serialVersionUID = 1739028172595259352L; /* * (non-Javadoc) * * @see javax.servlet.http.HttpServlet#service(javax.servlet.ServletRequest, * javax.servlet.ServletResponse) */ @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String messageId = request.getParameter("messageId"); if (messageId != null) { IMailbox mailbox = SessionManager.get().getMailbox(); Message msg = mailbox.getCurrentFolder().getMessageById(Long.parseLong(messageId)); ContentType contentType = new ContentType("text/plain"); response.setContentType(contentType.getBaseType()); response.setHeader("expires", "0"); String charset = null; if (msg.getContentType() != null) { try { charset = new ContentType(msg.getContentType()).getParameter("charset"); } catch (Throwable e) { // should never happen } } if (null == charset || charset.equalsIgnoreCase(CubusConstants.US_ASCII)) { charset = CubusConstants.DEFAULT_CHARSET; } OutputStream outputStream = response.getOutputStream(); // writing the header String header = generateHeader(msg); outputStream.write(header.getBytes(), 0, header.length()); BufferedInputStream bufInputStream = new BufferedInputStream(msg.getInputStream()); InputStreamReader reader = null; try { reader = new InputStreamReader(bufInputStream, charset); } catch (UnsupportedEncodingException e) { logger.error(e.getMessage(), e); reader = new InputStreamReader(bufInputStream); } OutputStreamWriter writer = new OutputStreamWriter(outputStream); char[] inBuf = new char[1024]; int len = 0; try { while ((len = reader.read(inBuf)) > 0) { writer.write(inBuf, 0, len); } } catch (Throwable e) { logger.warn("Download canceled!"); } writer.flush(); writer.close(); outputStream.flush(); outputStream.close(); } } catch (Exception e) { logger.error(e.getMessage(), e); } } /** * @param msg * @return */ @SuppressWarnings("unchecked") private String generateHeader(Message msg) { StringBuffer headerString = new StringBuffer(); try { Enumeration<Header> e = msg.getAllHeaders(); if (e != null) { for (; e.hasMoreElements();) { Header header = e.nextElement(); headerString.append(header.getName()); headerString.append(": "); headerString.append(header.getValue()); headerString.append('\n'); } } } catch (MessagingException e) { logger.error(e.getMessage(), e); } return headerString.toString(); } }