/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando Enterprise Edition software. * You can redistribute it and/or modify it * under the terms of the Entando's EULA * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpwebmail.apsadmin.webmail.message; import java.io.InputStream; import javax.activation.DataHandler; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.internet.MimeMultipart; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.interceptor.ServletResponseAware; import com.agiletec.aps.system.ApsSystemUtils; /** * @version 1.0 * @author E.Santoboni */ public class MessageAction extends AbstractMessageAction implements IMessageAction, ServletResponseAware { @Override public String openMessage() { try { Message message = this.getSelectedMessage(); if (null == message) return "intro"; this.setMessage(message); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "deleteMessages"); return FAILURE; } return SUCCESS; } @Override public String openAttachment() { try { Message message = this.getSelectedMessage(); if (null == message) return "intro"; BodyPart part = ((MimeMultipart) message.getContent()).getBodyPart(this.getAttachmentNumber()); if (this.getSubPartAttachmentNumber()>-1) { BodyPart subPart = ((MimeMultipart) part.getContent()).getBodyPart(this.getSubPartAttachmentNumber()); this.createResponse(subPart); } else { this.createResponse(part); } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "openAttachment"); return FAILURE; } return null; } private void createResponse(BodyPart part) throws Throwable { DataHandler handler = part.getDataHandler(); this._response.setContentType(handler.getContentType()); this._response.setHeader("Content-Disposition","attachment; filename="+handler.getName()); ServletOutputStream out = _response.getOutputStream(); try { InputStream is = handler.getInputStream(); byte[] buffer = new byte[8789]; int length = -1; while ((length = is.read(buffer)) != -1) { out.write(buffer, 0, length); out.flush(); } is.close(); } catch (Throwable t) { throw new ServletException("Errore in erogazione Attachment", t); } } @Override public void setServletResponse(HttpServletResponse response) { this._response = response; } public Message getMessage() { return _message; } public void setMessage(Message message) { this._message = message; } public int getAttachmentNumber() { return _attachmentNumber; } public void setAttachmentNumber(int attachmentNumber) { this._attachmentNumber = attachmentNumber; } public int getSubPartAttachmentNumber() { return _subPartAttachmentNumber; } public void setSubPartAttachmentNumber(int subPartAttachmentNumber) { this._subPartAttachmentNumber = subPartAttachmentNumber; } private Message _message; private int _attachmentNumber; private int _subPartAttachmentNumber = -1; private HttpServletResponse _response; }