public static String getBody(Message message) throws Exception { try { message.getContent(); // This might throw an exception... } catch (Throwable ex) { try { // Content could not be resolved for some reason - just get the raw stuff return ConvertUtil.inputStreamToString(message.getInputStream()); } catch (Throwable ex2) { // bodystructure is corrupt - get the really raw stuff ByteArrayOutputStream out = new ByteArrayOutputStream(); message.writeTo(out); return out.toString(); } } // check if message is a normal message or a Multipart message if (message.getContent() instanceof MimeMultipart) { MultipartResult res = new MailUtils.MultipartResult(); MailUtils.readMultiPart(res, (MimeMultipart) message.getContent()); return res.body.isEmpty() ? res.bodyHtml : res.body; } else { if (message.getContent().toString() != null) { return message.getContent().toString(); } } return null; }
/** * Creates a Mail * * @param inboxHelper * @param message * @param mUId * @return * @throws FolderClosedException * @throws MessagingException * @throws IOException */ public static RawMail createMail(Message message) throws FolderClosedException { try { // fill the message objects with messagedata String[] fromInfo = MailUtils.getFromInfo(message.getFrom()); if (fromInfo[0] == null || fromInfo[0].isEmpty()) { fromInfo = MailUtils.getFromInfo(message.getReplyTo()); } if (fromInfo[0] == null || fromInfo[0].isEmpty()) { String[] returnPath = message.getHeader("Return-Path"); if (returnPath.length > 0) { fromInfo[0] = returnPath[0].trim(); if (fromInfo[0].charAt(0) == '<') fromInfo[0].substring(1); if (fromInfo[0].charAt(fromInfo[0].length() - 1) == '>') fromInfo[0].substring(0, fromInfo[0].length() - 2); } } String mFromAddress = (fromInfo[0] != null) ? fromInfo[0] : ""; RawMail mail = new RawMail(); // Note: Mail ids are generated based on contents - do not set an id String mSubject = message.getSubject(); mail.setSubject(mSubject); mail.setFrom(new EmailAddress(mFromAddress, fromInfo[1])); mail.setCreated(new Date()); // Prevent evil mail servers from sending from the future Date now = new Date(); Date sentDate = message.getSentDate(); Date recDate = message.getReceivedDate(); if (sentDate == null || now.before(sentDate)) sentDate = new Date(); if (recDate == null || now.before(recDate)) recDate = new Date(); mail.setSentDate(sentDate); mail.setRecievedDate(recDate); mail.setServerId(String.valueOf(message.getMessageNumber())); try { mail.setBody(MailUtils.getBody(message)); } catch (Throwable ex) { System.out.println("Failed when reading mail body"); } // Headers Enumeration<?> allHeaders = message.getAllHeaders(); HashMap<String, String> mailHeaders = new HashMap<String, String>(); while (allHeaders.hasMoreElements()) { Header header = (Header) allHeaders.nextElement(); mailHeaders.put(header.getName(), header.getValue()); } mail.setHeaders(mailHeaders); try { mail.setRecipients(MailUtils.getRecipients(Message.RecipientType.TO, message)); } catch (Throwable ex) { System.out.println("Throwable during setRecipients"); } try { mail.setRecipients(MailUtils.getRecipients(Message.RecipientType.CC, message)); } catch (Throwable ex) { System.out.println("Throwable during setRecipients"); } try { mail.setRecipients(MailUtils.getRecipients(Message.RecipientType.BCC, message)); } catch (Throwable ex) { System.out.println("Throwable during setRecipients"); } return mail; } catch (FolderClosedException ex) { throw ex; } catch (Throwable ex) { System.out.println("Could not read mail"); } return null; }