Edit C:\galaxie\Back\galaxie\netbusiness\messages\display_message.jsp
<% /****************************************************************************** * Copyright (c) 2000-2005 e-Deal * * e-Deal S.A. * 55 rue Brillat Savarin * 75013 Paris * France * * T: +33 (0)1 53 80 80 30 * F: +33 (0)1 73 01 69 77 * http://www.e-deal.com * * La diffusion de ce code source sous quelque forme que ce soit sans * l'autorisation de E-DEAL est interdite. * * Vous êtes autorisés à modifier ce code source uniquement pour votre usage * propre et sous réserve que les mentions de copyright demeurent intactes. * Ce code est fourni en l'état. Aucune garantie d'aucune sorte, explicite ou * implicite n'est donnée. En aucun cas E-DEAL ne pourra être tenu pour * responsable des dommages pouvant résulter de l'utilisation de ce code * source. * ******************************************************************************/ %><%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true" import="com.edeal.frontline.*,java.util.*,javax.mail.*,javax.mail.internet.*,java.io.*"%><%@ page import="com.edeal.frontline.navigation.FlRequest" %><%@ page import="com.edeal.frontline.FlContext" %><%@ page import="com.edeal.frontline.DataDictionary" %><%@taglib uri="http://www.e-deal.com/taglib/fl" prefix="fl" %><% final org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory.getLog(getClass()); FlRequest flRequest = new FlRequest(request); FlContext context = flRequest.getContext(); DataDictionary dico = context.getDataDictionary(); MessagesBean msgBean = (MessagesBean)session.getAttribute("Messages"); session.removeAttribute("Messages"); String msgID; if (msgBean != null){ try { msgID = msgBean.getID(); } catch (FrontlineException e) { msgID = flRequest.getRequestParameterOrAttribute("id"); } }else{ msgID = flRequest.getRequestParameterOrAttribute("msgID"); msgBean = new MessagesBean(msgID, session); } //clé du message à afficher String toDisplay = Utils.getRequestParameter(context, request, "toDisplay"); if (toDisplay == null) toDisplay = "1"; String dbVendor = context.getContextParameter("DatabaseVendor"); boolean isOracle = "oracle".equalsIgnoreCase(dbVendor); Hashtable messageOutline = new Hashtable(); Hashtable levelFromCID = new Hashtable(); String displayType = ""; try { MessagesBean.Mail mail = null; try { mail = msgBean.getMail(null, null); } catch (Exception e) { logger.error("exception : " + e + " " + e.getMessage()); logger.error("STACK TRACE : ",e); } if (mail!=null) { MimeMessage m = mail.getMimeMessage(); //construire la hashtable de toute l'arborescence String levelStub = ""; int level = 0; dumpPart(session, messageOutline, levelStub, level, displayType, m, levelFromCID); //on a maintenant dans messageOutline toute l'arborescence du message //chaque clé de la hashtable est un numéro permettant de situer l'entrée dans l'arbre (1 ; 1.1 ; 1.2 ; 1.1.1 ...) //la valeur correspondant à chaque clé est un vecteur : (type de noeud, contenu du noeud). // - Si le type vaut "MESSAGE", le contenu est la chaîne de caractère de l'enveloppe. // Et on trouvera un autre élément dans la hashtable de clé même_numéroBODY (par exemple "1.1.1BODY") // et de valeur le body du message // - Si c'est un attachment, le type est le type de l'attachment et le contenu est le nom du fichier à récupérer //afficher le mail qui nous intéresse -> initialisation de levelStub et level là où on veut if (toDisplay.lastIndexOf(".") != -1) { levelStub = toDisplay.substring(0, toDisplay.lastIndexOf(".") + 1); level = new Integer(toDisplay.substring(toDisplay.lastIndexOf(".") + 1)).intValue(); } else { levelStub = ""; level = new Integer(toDisplay).intValue(); } if (messageOutline.containsKey(toDisplay)) { StringBuffer newBody = new StringBuffer(); String body = ""; Vector node = (Vector)messageOutline.get(toDisplay); if (!"MESSAGE".equals(node.elementAt(0))) { %> Not a mail! : <%= node.elementAt(0) %><br> <% } else { body = (String)messageOutline.get(toDisplay + "BODY"); // traitement des images inline int currPos = 0; String pattern = "\"cid:"; int pos = body.indexOf(pattern); while (pos > -1) { newBody.append(body.substring(0, pos)); currPos = pos + pattern.length(); body = body.substring(currPos); int pos1 = body.indexOf("\""); String levelToDisplay = (String)levelFromCID.get("<" + body.substring(0, pos1) + ">"); newBody.append("\""); newBody.append(request.getContextPath()); newBody.append("/netbusiness/messages/serve_attachment.jsp?msgID="); newBody.append(msgID); newBody.append("&toDisplay="); newBody.append(levelToDisplay); body = body.substring(pos1); pos = body.indexOf(pattern); } newBody.append(body); %> <table width='100%' align='center' style="font-family: arial;font-size: 12" cellpadding='3' cellspacing='3' border='0'> <!-- begin envelope --> <%= node.elementAt(1) %> <!-- end envelope --> <% //si le mail a des frères (= des pièces jointes ou des messages attachés), afficher les liens //exemple : si on est au niveau 1.2 on regarde les 1.3, 1.4, etc. int brotherLevel = level + 1; while (messageOutline.containsKey(levelStub + brotherLevel)) { node = (Vector)messageOutline.get(levelStub + brotherLevel); //logger.debug("brother " + (levelStub + brotherLevel) + " " + node); //soit c'est un message if ("MESSAGE".equals(node.elementAt(0))) { %> <tr> <td style="background-color: #EEE;text-align: center"><img src="<fl:webapp/>/icons/ico/email.gif" width="16" height="16" border="0"></td> <td> <a href="<fl:webapp/>/netbusiness/messages/display_message.jsp?msgID=<%= msgID %>&toDisplay=<%= levelStub + brotherLevel %>"> <fl:getMessage code="L6371" alt="Message joint"/> </a> </td> </tr> <% //soit c'est une pièce jointe } else { %> <tr> <td style="background-color: #EEE;text-align: center"><img src="<fl:webapp/>/icons/ico/doc_joint.gif" width="16" height="16" border="0"></td> <td><a href="<fl:webapp/>/netbusiness/messages/serve_attachment.jsp?msgID=<%= msgID %>&toDisplay=<%= levelStub + brotherLevel %>"> <% String attachmentFileName = ((String)node.elementAt(1)).trim(); // Pretty-print the filename: if the filename contains // non-ASCII chars like quotes, the sending mail server has // transcoded some chars like in this example: // "=?iso-8859-1?Q?sch=E9ma.doc?=" attachmentFileName = MimeUtility.decodeText(attachmentFileName); String attachmentFileSize = (String)node.elementAt(0); %> <%= attachmentFileName %>(<%= attachmentFileSize %>) </a> </td> </tr> <% } brotherLevel++; } int i = 1; //si le mail a des fils (= des mails forwardés), afficher les liens, mais seulement pour les mails, pas les pièces jointes //exemple : si on est au niveau 1.2 on regarde les 1.2.x while (messageOutline.containsKey(levelStub + level + "." + i)) { node = (Vector)messageOutline.get(levelStub + level + "." + i); if ("MESSAGE".equals(node.elementAt(0))) { %> <tr> <td style="background-color: #EEE;text-align: center"><img src="<fl:webapp/>/icons/ico_interaction/alerte_mail.gif" width="16" height="16" border="0"></td> <td> <a href="<fl:webapp/>/netbusiness/messages/display_message.jsp?msgID=<%= msgID %>&toDisplay=<%= levelStub + level + "." + i %>"> <fl:getMessage code="L6372" alt="Message transmis"/> </a> </td> </tr> <% } i++; } } %></table> <%= newBody.toString() %> <% } else { logger.warn("key to display not present in hashtable"); } } else { logger.debug("netbusiness/messages/display_message.jsp : mail null!"); %> <fl:getMessage code="L6370" alt="Le message n\'a pu être affiché. Contactez votre administrateur."/><% } } catch (Exception e ) { logger.error(e + " " + e.getMessage()); logger.error("STACK TRACE : ",e); } %> <%! //dumpPart builds (recursively) the Hashtable messageOutline as the tree that represents the message p public int dumpPart(HttpSession session, Hashtable messageOutline, String levelStub, int level, String displayType, javax.mail.Part p, Hashtable levelFromCID) throws Exception { //logger.debug("\nDUMPPART " + levelStub + level); //when we arrive here, levelStub + level is the level of the former brother String envelope = null; if (p instanceof Message) { envelope = dumpEnvelope(session, (Message)p).toString(); } String ct = p.getContentType(); String filename = p.getFileName(); boolean isRfc822= p.isMimeType("message/rfc822"); /* * Using isMimeType to determine the content type avoids * fetching the actual content data until we need it. */ if (p.isMimeType("multipart/*") && "".equals(levelStub)) { level++; dumpPart(session, messageOutline, levelStub + level + ".", 0, displayType, p, levelFromCID); return level; } if ((p.isMimeType("text/plain") || p.isMimeType("text/html")) && filename==null ) { ++level; //if the message is text/plain, then we are interested in the envelope if (envelope != null) { while (messageOutline.containsKey(levelStub.substring(2) + level)) { level++; } //logger.debug("1. Putting envelope " + levelStub.substring(2) + level + " in hashtable : " + envelope); Vector node = new Vector(2); node.add(0, "MESSAGE"); node.add(1, envelope); messageOutline.put(levelStub.substring(2) + level, node); } //store message body in the hashtable messageOutline.put(levelStub.substring(2) + level + "BODY", "<pre WRAP='virtual' style='white-space:normal'>" + (String)p.getContent() + "</pre>"); String cid = null; Enumeration headers = p.getAllHeaders(); while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); //logger.debug(header.getName() + " / " + header.getValue()); if ("Content-ID".equalsIgnoreCase(header.getName())) { cid = header.getValue(); } } if (levelStub != null && cid != null) { levelFromCID.put(cid, levelStub.substring(2) + level); } return level; } else if (p.isMimeType("multipart/*")) { /**/ Multipart mp = (Multipart)p.getContent(); int count = mp.getCount(); //if this is multipart alternative, get the html form, not the text form if (p.isMimeType("multipart/alternative") && count==2) { //logger.debug("multipart/alternative"); //get the envelope if (envelope != null) { //level ++; //while (messageOutline.containsKey(levelStub.substring(2) + (level+1))) { level++; } Vector node = new Vector(2); node.add(0, "MESSAGE"); node.add(1, envelope); messageOutline.put(levelStub.substring(2) + (level+1), node); String cid = null; Enumeration headers = p.getAllHeaders(); while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); //logger.debug(header.getName() + " / " + header.getValue()); if ("Content-ID".equalsIgnoreCase(header.getName())) { cid = header.getValue(); } } if (levelStub != null && cid != null) { levelFromCID.put(cid, levelStub.substring(2) + (level + 1)); } } //call dump part on the text/html part return dumpPart(session, messageOutline, levelStub, level, displayType, mp.getBodyPart(1), levelFromCID); } else { //if this part is "true" multipart //get the envelope if (envelope != null) { while (messageOutline.containsKey(levelStub.substring(2) + (level+1))) { level++; } Vector node = new Vector(2); node.add(0, "MESSAGE"); node.add(1, envelope); messageOutline.put(levelStub.substring(2) + (level+1), node); String cid = null; Enumeration headers = p.getAllHeaders(); while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); //logger.debug(header.getName() + " / " + header.getValue()); if ("Content-ID".equalsIgnoreCase(header.getName())) { cid = header.getValue(); } } if (levelStub != null && cid != null) { levelFromCID.put(cid, levelStub.substring(2) + (level + 1)); } } //loop on its parts, same level in the tree for (int i = 0; i < count; i++) { dumpPart(session, messageOutline, levelStub, level, displayType, mp.getBodyPart(i), levelFromCID); } } } else if (p.isMimeType("message/rfc822")) { level++; Object ocontent=p.getContent(); System.out.println("ocontent:"+ocontent.getClass().getName()); dumpPart(session, messageOutline, levelStub + level + ".", 0, displayType, (javax.mail.Part)p.getContent(), levelFromCID); return level; } else { /* * If we actually want to see the data, and it's not a * MIME type we know, fetch it and check its Java type. */ Object o = p.getContent(); if (o instanceof String) { level++; while (messageOutline.containsKey(levelStub.substring(2) + level + "BODY")) { level++; } //logger.debug("Putting Html body " + levelStub.substring(2) + level + " in hashtable"); messageOutline.put(levelStub.substring(2) + level + "BODY", o); String cid = null; Enumeration headers = p.getAllHeaders(); while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); //logger.debug(header.getName() + " / " + header.getValue()); if ("Content-ID".equalsIgnoreCase(header.getName())) { cid = header.getValue(); } } if (levelStub != null && cid != null) { levelFromCID.put(cid, levelStub.substring(2) + level); } return level; } else { level++; while (messageOutline.containsKey(levelStub.substring(2) + level)) { level++; } //logger.debug("Putting attachment " + levelStub.substring(2) + level + " in hashtable : " + filename); Vector node = new Vector(2); int size = p.getSize(); String sSize = ""; if (size < 1024) { sSize = String.valueOf(size) + " " + Utils.getMessage(session, "L6376", "octets"); } else if (size < (1024 * 1024)) { sSize = String.valueOf(size / 1024) + " " + Utils.getMessage(session, "L6377", "Ko"); } else { float moSize = (float)Math.round((float)(100 * size) / (float)(1024 * 1024)) / (float)100; sSize = String.valueOf(moSize) + " " + Utils.getMessage(session, "L6378", "Mo"); } node.add(0, sSize); node.add(1, filename); messageOutline.put(levelStub.substring(2) + level, node); String cid = null; Enumeration headers = p.getAllHeaders(); while (headers.hasMoreElements()) { Header header = (Header)headers.nextElement(); //logger.debug(header.getName() + " / " + header.getValue()); if ("Content-ID".equalsIgnoreCase(header.getName())) { cid = header.getValue(); } } if (levelStub != null && cid != null) { levelFromCID.put(cid, levelStub.substring(2) + level); } return level; } } return -1; } //end of dumpMessage public StringBuffer dumpEnvelope(HttpSession session, Message m) throws Exception { StringBuffer buf = new StringBuffer(); //buf.append("<table width='100%' align='center' cellpadding='3' cellspacing='3' border='1'>"); buf.append("<tr>"); Address[] a; // FROM buf.append("<td width='5%' class='transparent' style='background-color: #CCC;text-align: center'>" + Utils.getMessage(session, "L6367", "De :") + "</td>"); if ((a = m.getFrom()) != null) { buf.append("<td>"); for (int j = 0; j < a.length; j++) { String displayName = ((InternetAddress)a[j]).getPersonal() != null ? ((InternetAddress)a[j]).getPersonal() : ((InternetAddress)a[j]).getAddress(); if (j!=0) buf.append(", "); buf.append("<a href='mailto:" + ((InternetAddress)a[j]).getAddress() + "'>" + displayName + "</a>"); } buf.append("</td>"); } buf.append("</tr>"); // TO if ((a = m.getRecipients(Message.RecipientType.TO)) != null) { buf.append("<tr><td class='transparent' style='background-color: #CCC;text-align: center'>" + Utils.getMessage(session, "L6368", "A :") + "</td>"); buf.append("<td>"); for (int j = 0; j < a.length; j++) { if (j!=0) buf.append(", "); String displayName = ((InternetAddress)a[j]).getPersonal() != null ? ((InternetAddress)a[j]).getPersonal() : ((InternetAddress)a[j]).getAddress(); buf.append("<a href='mailto:" + ((InternetAddress)a[j]).getAddress() + "'>" + displayName + "</a>"); } buf.append("</td></tr>"); } // CC if ((a = m.getRecipients(Message.RecipientType.CC)) != null) { buf.append("<tr><td class='transparent' style='background-color: #CCC;text-align: center'>" + Utils.getMessage(session, "L622E", "Cc:") + "</td>"); buf.append("<td>"); for (int j = 0; j < a.length; j++) { if (j!=0) buf.append(", "); String displayName = ((InternetAddress)a[j]).getPersonal() != null ? ((InternetAddress)a[j]).getPersonal() : ((InternetAddress)a[j]).getAddress(); buf.append("<a href='mailto:" + ((InternetAddress)a[j]).getAddress() + "'>" + displayName + "</a>"); } buf.append("</td></tr>"); } // DATE Date d = m.getSentDate(); buf.append("<tr><td class='transparent' style='background-color: #CCC;text-align: center'>" + Utils.getMessage(session, "F2019", "Date") + "</td><td>" + (d != null ? Utils.formatToWeb(d, false) : Utils.getMessage(session, "L6369", "Inconnue")) + "</td></tr>"); // SUBJECT buf.append("<tr><td class='transparent' style='background-color: #CCC;text-align: center'>" + Utils.getMessage(session, "F203B", "Sujet") + "</td><td>" + m.getSubject() + "</td></tr>"); buf.append("</tr>"); //buf.append("</table> "); //logger.debug("Envelope : " + buf); return buf; } // end dumpenvelope %><% /****************************************************************************** * CVS Log File - This is no longer maintained! * * Revision 1.1 2005/03/11 14:37:51 brian * Initial revision. Copied from sales/interaction * * *****************************************************************************/ %>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de