Example usage for org.apache.poi.hsmf MAPIMessage getAttachmentFiles

List of usage examples for org.apache.poi.hsmf MAPIMessage getAttachmentFiles

Introduction

In this page you can find the example usage for org.apache.poi.hsmf MAPIMessage getAttachmentFiles.

Prototype

public AttachmentChunks[] getAttachmentFiles() 

Source Link

Document

Gets the message attachments.

Usage

From source file:com.github.n_i_e.dirtreedb.MsgLister.java

License:Apache License

@Override
protected PathEntry getNext() throws IOException {
    try {//from w w  w.j a v a 2s  .  c  om
        if (content == null) {
            MAPIMessage msg;
            msg = new MAPIMessage(inf);

            date = msg.getMessageDate() == null ? 0L : msg.getMessageDate().getTimeInMillis();
            subject = msg.getSubject();

            String s = subjectToFilename(subject, "text/plain", 1);
            s = s.replace("\\", "/");
            Assertion.assertAssertionError(!s.equals(""));
            PathEntry next_entry = new PathEntry(getBasePath().getPath() + "/" + s, PathEntry.COMPRESSEDFILE);
            next_entry.setDateLastModified(date);
            next_entry.setStatus(PathEntry.DIRTY);
            byte[] body = getByteArrayWithBom(msg.getTextBody());
            next_entry.setCompressedSize(body.length);
            next_entry.setSize(next_entry.getSize());

            instream = new ByteArrayInputStreamWithCascadingClose(body);
            if (isCsumRequested()) {
                next_entry.setCsum(instream);
            }
            content = msg.getAttachmentFiles();
            return next_entry;
        } else {
            AttachmentChunks part = null;
            byte[] data = null;
            while (data == null) {
                if (count >= content.length) {
                    return null;
                }
                part = content[count];
                try {
                    data = part.attachData.getValue();
                } catch (NullPointerException e) {
                    data = null;
                    count++;
                }
            }

            String filename;
            try {
                filename = part.attachFileName.getValue();
            } catch (NullPointerException e) {
                filename = String.valueOf(count);
            }
            filename = filename.replace("\\", "/");
            if (filename.equals("")) {
                filename = String.valueOf(count);
            }

            PathEntry next_entry = new PathEntry(getBasePath().getPath() + "/" + filename,
                    PathEntry.COMPRESSEDFILE);
            next_entry.setDateLastModified(date);
            next_entry.setStatus(PathEntry.DIRTY);
            next_entry.setCompressedSize(data.length);
            next_entry.setSize(data.length);

            instream = new ByteArrayInputStreamWithCascadingClose(data);
            if (isCsumRequested()) {
                next_entry.setCsumAndClose(instream);
            }
            count++;
            return next_entry;
        }
    } catch (ChunkNotFoundException e) {
        return null;
    }
}

From source file:com.lp.client.util.OutlookToJCR.java

License:Open Source License

private List<JCRDocDto> getAttachments(MAPIMessage msg, JCRDocDto vorlage) {
    List<JCRDocDto> jcrs = new ArrayList<JCRDocDto>();

    AttachmentChunks[] attachments = msg.getAttachmentFiles();
    if (attachments != null) {
        for (AttachmentChunks attachment : attachments) {
            if (attachment.attachData == null)
                continue;
            JCRDocDto jcr = new JCRDocDto();
            jcr.setbData(attachment.attachData.getValue());
            String filename = attachment.attachLongFileName == null ? attachment.attachFileName.toString()
                    : attachment.attachLongFileName.toString();
            jcr.setsFilename(filename);/*from  ww w . j  a v  a  2  s . c o  m*/
            jcr.setsMIME(Helper.getMime(filename));
            jcr.setsName(Helper.getName(filename));

            jcr.setDocPath(vorlage.getDocPath().getDeepCopy().add(new DocNodeFile(filename)));
            jcr.setsSchlagworte(vorlage.getsSchlagworte());
            jcrs.add(jcr);
        }
    }

    return jcrs;
}

From source file:com.openkm.util.MailUtils.java

License:Open Source License

/**
 * Add attachments to an imported mail./*from   ww  w . ja v a2 s  . c  o m*/
 */
public static void addAttachments(String token, com.openkm.bean.Mail mail, MAPIMessage msg, String userId)
        throws DatabaseException, RepositoryException, PathNotFoundException, ItemExistsException,
        VirusDetectedException, UserQuotaExceededException, UnsupportedMimeTypeException, ExtensionException,
        AccessDeniedException, IOException, AutomationException, FileSizeExceededException {
    for (AttachmentChunks att : msg.getAttachmentFiles()) {
        if (!att.isEmbeddedMessage()) {
            String attFileName = att.attachFileName.toString();
            if (att.attachLongFileName != null) {
                attFileName = att.attachLongFileName.toString();
            }

            log.debug("Importing attachment: {}", attFileName);
            String fileName = FileUtils.getFileName(attFileName);
            String fileExtension = FileUtils.getFileExtension(attFileName);
            String testName = fileName + "." + fileExtension;

            // Test if already exists a document with the same name in the mail
            for (int j = 1; OKMRepository.getInstance().hasNode(token, mail.getPath() + "/" + testName); j++) {
                // log.debug("Trying with: {}", testName);
                testName = fileName + " (" + j + ")." + fileExtension;
            }

            Document attachment = new Document();
            String mimeType = MimeTypeConfig.mimeTypes.getContentType(testName.toLowerCase());
            attachment.setMimeType(mimeType);
            attachment.setPath(mail.getPath() + "/" + testName);
            ByteArrayInputStream bais = new ByteArrayInputStream(att.attachData.getValue());

            if (Config.REPOSITORY_NATIVE) {
                new DbDocumentModule().create(token, attachment, bais, att.attachData.getValue().length,
                        userId);
            } else {
                // Other implementation
            }

            IOUtils.closeQuietly(bais);
        }
    }
}

From source file:fr.gouv.culture.vitam.eml.MsgExtract2.java

License:Open Source License

private static String extractInfoSubEmail(MAPIMessage msg, File curDir, Element root, VitamArgument argument,
        ConfigLoader config) {/* w ww. j  av  a 2 s.c  om*/
    File curPath = null;
    Element keywords = XmlDom.factory.createElement(EMAIL_FIELDS.keywords.name);
    Element metadata = XmlDom.factory.createElement(EMAIL_FIELDS.metadata.name);

    String id = config.addRankId(root);
    curPath = new File(curDir, "MSG_" + id);
    //System.out.println("start of "+id);
    String[] values = new String[Keywords.values().length];
    for (int i = 0; i < Keywords.values().length; i++) {
        values[i] = null;
    }
    String[] test = null;
    try {
        test = msg.getHeaders();
    } catch (ChunkNotFoundException e4) {
        // TODO Auto-generated catch block
        e4.printStackTrace();
    }
    int lastRank = -1;
    for (String string : test) {
        if (string.startsWith(Keywords.NextOne.name) && lastRank >= 0) {
            String recv = string.substring(Keywords.NextOne.name.length());
            if (values[lastRank] == null) {
                values[lastRank] = recv;
            } else {
                values[lastRank] += (Keywords.Received.ordinal() == lastRank ? "\n" : " ") + recv;
            }
        } else {
            if (string.startsWith(Keywords.Date.name)) {
                values[Keywords.Date.ordinal()] = string.substring(Keywords.Date.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.XOriginalArrivalTime.name)) {
                values[Keywords.XOriginalArrivalTime.ordinal()] = string
                        .substring(Keywords.XOriginalArrivalTime.name.length());
                int pos = values[Keywords.XOriginalArrivalTime.ordinal()].indexOf(" FILETIME=");
                if (pos > 0) {
                    values[Keywords.XOriginalArrivalTime
                            .ordinal()] = values[Keywords.XOriginalArrivalTime.ordinal()].substring(0, pos);
                }
                lastRank = -1;
            } else if (string.startsWith(Keywords.MessageId.name)) {
                values[Keywords.MessageId.ordinal()] = string.substring(Keywords.MessageId.name.length());
                values[Keywords.MessageId.ordinal()] = StringUtils
                        .removeChevron(
                                StringUtils.unescapeHTML(values[Keywords.MessageId.ordinal()], true, false))
                        .trim();
                lastRank = -1;
            } else if (string.startsWith(Keywords.InReplyTo.name)) {
                String reply = StringUtils.removeChevron(StringUtils
                        .unescapeHTML(string.substring(Keywords.InReplyTo.name.length()), true, false));
                if (values[Keywords.InReplyTo.ordinal()] == null) {
                    values[Keywords.InReplyTo.ordinal()] = reply;
                } else {
                    values[Keywords.InReplyTo.ordinal()] += " " + reply;
                }
                lastRank = Keywords.InReplyTo.ordinal();
            } else if (string.startsWith(Keywords.Received.name)) {
                String recv = string.substring(Keywords.Received.name.length());
                if (values[Keywords.Received.ordinal()] == null) {
                    values[Keywords.Received.ordinal()] = recv;
                } else {
                    values[Keywords.Received.ordinal()] += "\n" + recv;
                }
                lastRank = Keywords.Received.ordinal();
            } else if (string.startsWith(Keywords.From.name)) {
                values[Keywords.From.ordinal()] = string.substring(Keywords.From.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.To.name)) {
                if (values[Keywords.To.ordinal()] == null) {
                    values[Keywords.To.ordinal()] = string.substring(Keywords.To.name.length());
                } else {
                    values[Keywords.To.ordinal()] += " " + string.substring(Keywords.To.name.length());
                }
                lastRank = Keywords.To.ordinal();
            } else if (string.startsWith(Keywords.Cc.name)) {
                if (values[Keywords.Cc.ordinal()] == null) {
                    values[Keywords.Cc.ordinal()] = string.substring(Keywords.Cc.name.length());
                } else {
                    values[Keywords.Cc.ordinal()] += " " + string.substring(Keywords.Cc.name.length());
                }
                lastRank = Keywords.Cc.ordinal();
            } else if (string.startsWith(Keywords.Bcc.name)) {
                if (values[Keywords.Bcc.ordinal()] == null) {
                    values[Keywords.Bcc.ordinal()] = string.substring(Keywords.Bcc.name.length());
                } else {
                    values[Keywords.Bcc.ordinal()] += " " + string.substring(Keywords.Bcc.name.length());
                }
                lastRank = Keywords.Bcc.ordinal();
            } else if (string.startsWith(Keywords.ReturnPath.name)) {
                if (values[Keywords.ReturnPath.ordinal()] == null) {
                    values[Keywords.ReturnPath.ordinal()] = string.substring(Keywords.ReturnPath.name.length());
                } else {
                    values[Keywords.ReturnPath.ordinal()] += " "
                            + string.substring(Keywords.ReturnPath.name.length());
                }
                lastRank = Keywords.ReturnPath.ordinal();
            } else if (string.startsWith(Keywords.Importance.name)) {
                values[Keywords.Importance.ordinal()] = string.substring(Keywords.Importance.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.Priority.name)) {
                values[Keywords.Priority.ordinal()] = string.substring(Keywords.Priority.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.XFolder.name)) {
                values[Keywords.XFolder.ordinal()] = string.substring(Keywords.XFolder.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.XSDOC.name)) {
                values[Keywords.XSDOC.ordinal()] = string.substring(Keywords.XSDOC.name.length());
                lastRank = -1;
            } else if (string.startsWith(Keywords.Sensitivity.name)) {
                values[Keywords.Sensitivity.ordinal()] = string.substring(Keywords.Sensitivity.name.length());
                lastRank = -1;
            } else {
                lastRank = -1;
            }
        }
    }
    /*for (int i = 0; i < Keywords.values().length; i++) {
       System.out.println(Keywords.values()[i].name()+": "+values[i]);
    }*/

    if (values[Keywords.XFolder.ordinal()] != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.folder.name);
        sub.addAttribute(EMAIL_FIELDS.folderName.name, values[Keywords.XFolder.ordinal()]);
        metadata.add(sub);
    }
    String fromEmail = values[Keywords.From.ordinal()];
    if (fromEmail != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.from.name);
        addAddress(sub, EMAIL_FIELDS.fromUnit.name, fromEmail);
        String fromEmail2 = values[Keywords.ReturnPath.ordinal()];
        if (fromEmail2 != null && !fromEmail.contains(fromEmail2)) {
            addAddress(sub, EMAIL_FIELDS.fromUnit.name, fromEmail2);
        }
        metadata.add(sub);
    } else {
        String fromEmail2 = values[Keywords.ReturnPath.ordinal()];
        if (fromEmail2 != null) {
            Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.from.name);
            addAddress(sub, EMAIL_FIELDS.fromUnit.name, fromEmail2);
            metadata.add(sub);
        }
    }
    fromEmail = values[Keywords.To.ordinal()];
    if (fromEmail != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.toRecipients.name);
        String[] to = fromEmail.split(",");
        for (String string2 : to) {
            addAddress(sub, EMAIL_FIELDS.toUnit.name, string2);
        }
        metadata.add(sub);
    }
    fromEmail = values[Keywords.Cc.ordinal()];
    if (fromEmail != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.ccRecipients.name);
        String[] to = fromEmail.split(",");
        for (String string2 : to) {
            addAddress(sub, EMAIL_FIELDS.ccUnit.name, string2);
        }
        metadata.add(sub);
    }
    fromEmail = values[Keywords.Bcc.ordinal()];
    if (fromEmail != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.bccRecipients.name);
        String[] to = fromEmail.split(",");
        for (String string2 : to) {
            addAddress(sub, EMAIL_FIELDS.bccUnit.name, string2);
        }
        metadata.add(sub);
    }

    String subject = null;
    try {
        subject = msg.getSubject();
    } catch (ChunkNotFoundException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    if (subject != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.subject.name);
        sub.setText(StringUtils.unescapeHTML(subject, true, false));
        metadata.add(sub);
    }
    subject = null;
    try {
        subject = msg.getConversationTopic();
    } catch (ChunkNotFoundException e3) {
        //System.err.println(e3.getMessage());
    }
    if (subject != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.conversationTopic.name);
        sub.setText(StringUtils.unescapeHTML(subject, true, false));
        metadata.add(sub);
    }
    if (values[Keywords.Date.ordinal()] != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.sentDate.name);
        sub.setText(values[Keywords.Date.ordinal()]);
        metadata.add(sub);
    }
    if (values[Keywords.XOriginalArrivalTime.ordinal()] != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.receivedDate.name);
        sub.setText(values[Keywords.XOriginalArrivalTime.ordinal()]);
        metadata.add(sub);
    }
    if (values[Keywords.Received.ordinal()] != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.receptionTrace.name);
        String[] traces = values[Keywords.Received.ordinal()].split("\n");
        for (String string : traces) {
            Element sub3 = XmlDom.factory.createElement(EMAIL_FIELDS.trace.name);
            sub3.setText(string);
            sub.add(sub3);
        }
        metadata.add(sub);
    }
    if (values[Keywords.XSDOC.ordinal()] != null) {
        Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.emailSize.name);
        sub.setText(values[Keywords.XSDOC.ordinal()]);
        metadata.add(sub);
    }
    String messageId = values[Keywords.MessageId.ordinal()];
    if (messageId != null) {
        messageId = StringUtils.removeChevron(StringUtils.unescapeHTML(messageId, true, false)).trim();
        if (messageId.length() > 1) {
            Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.messageId.name);
            sub.setText(messageId);
            metadata.add(sub);
        }
    }
    String InReplyToId = values[Keywords.InReplyTo.ordinal()];
    if (InReplyToId != null) {
        InReplyToId = StringUtils.removeChevron(StringUtils.unescapeHTML(InReplyToId, true, false)).trim();
        if (InReplyToId.length() > 1) {
            Element sub = XmlDom.factory.createElement(EMAIL_FIELDS.inReplyTo.name);
            sub.setText(InReplyToId);
            if (messageId != null && messageId.length() > 1) {
                String old = EmlExtract.filEmls.get(InReplyToId);
                if (old == null) {
                    old = messageId;
                } else {
                    old += "," + messageId;
                }
                EmlExtract.filEmls.put(InReplyToId, old);
            }
            metadata.add(sub);
        }
        InReplyToId = null;
    }
    Element prop = XmlDom.factory.createElement(EMAIL_FIELDS.properties.name);
    String imp = values[Keywords.Importance.ordinal()];
    if (imp != null && imp.length() > 0) {
        try {
            int Priority = Integer.parseInt(imp);
            switch (Priority) {
            case 5:
                imp = "LOWEST";
                break;
            case 4:
                imp = "LOW";
                break;
            case 3:
                imp = "NORMAL";
                break;
            case 2:
                imp = "HIGH";
                break;
            case 1:
                imp = "HIGHEST";
                break;
            default:
                imp = "LEV" + Priority;
            }
        } catch (NumberFormatException e) {
            // ignore since imp will be used as returned
        }
        prop.addAttribute(EMAIL_FIELDS.importance.name, imp);
    }
    imp = values[Keywords.Priority.ordinal()];
    if (imp != null && imp.length() > 0) {
        try {
            int Priority = Integer.parseInt(imp);
            switch (Priority) {
            case 5:
                imp = "LOWEST";
                break;
            case 4:
                imp = "LOW";
                break;
            case 3:
                imp = "NORMAL";
                break;
            case 2:
                imp = "HIGH";
                break;
            case 1:
                imp = "HIGHEST";
                break;
            default:
                imp = "LEV" + Priority;
            }
        } catch (NumberFormatException e) {
            // ignore since imp will be used as returned
        }
        prop.addAttribute(EMAIL_FIELDS.priority.name, imp);
    }
    if (values[Keywords.Sensitivity.ordinal()] != null) {
        prop.addAttribute(EMAIL_FIELDS.sensitivity.name, values[Keywords.Sensitivity.ordinal()]);
    }
    AttachmentChunks[] files = msg.getAttachmentFiles();
    boolean Attachments = (files != null && files.length > 0);
    prop.addAttribute(EMAIL_FIELDS.hasAttachment.name, Boolean.toString(Attachments));
    metadata.add(prop);

    String result = "";
    Element identification = null;
    if (Attachments) {
        File oldPath = curPath;
        if (config.extractFile) {
            File newDir = new File(curPath, id);
            newDir.mkdir();
            curPath = newDir;
        }
        identification = XmlDom.factory.createElement(EMAIL_FIELDS.attachments.name);
        // get the number of attachments for this message
        int NumberOfAttachments = files.length;
        identification.addAttribute(EMAIL_FIELDS.attNumber.name, Integer.toString(NumberOfAttachments));
        // get a specific attachment from this email.
        for (int attachmentNumber = 0; attachmentNumber < NumberOfAttachments; attachmentNumber++) {
            AttachmentChunks attachment = files[attachmentNumber];
            if (argument.extractKeyword) {
                result += " " + extractInfoAttachment(attachment, identification, argument, config, curPath);
            } else {
                extractInfoAttachment(attachment, identification, argument, config, curPath);
            }
        }
        curPath = oldPath;
    }
    // Plain text e-mail body
    String body = "";
    if (argument.extractKeyword || config.extractFile) {
        try {
            body = msg.getTextBody();
        } catch (ChunkNotFoundException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        boolean isTxt = true;
        boolean isHttp = false;
        if (body == null || body.isEmpty()) {
            isTxt = false;
            try {
                body = msg.getHtmlBody();
            } catch (ChunkNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            isHttp = true;
            if (body == null || body.isEmpty()) {
                isHttp = false;
                try {
                    body = msg.getRtfBody();
                } catch (ChunkNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        if (body != null && !body.isEmpty()) {
            if (config.extractFile) {
                // XXX FIXME could saved email from HTML Body (clearer) if possible
                // use curRank in name, and attachment will be under directory named
                // add currank in field
                File newDir = new File(curPath, id);
                newDir.mkdir();
                String filenamebody = messageId;
                if (filenamebody == null || !filenamebody.isEmpty()) {
                    filenamebody = id;
                }
                String html = null;
                if (isHttp) {
                    html = body;
                }
                String rtf = null;
                if (!isTxt && !isHttp) {
                    rtf = body;
                }
                if (isTxt) {
                    FileOutputStream output = null;
                    try {
                        output = new FileOutputStream(new File(newDir, filenamebody + ".txt"));
                        byte[] bb = body.getBytes();
                        output.write(bb, 0, bb.length);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (output != null) {
                            try {
                                output.close();
                            } catch (IOException e) {
                            }
                        }
                    }
                    try {
                        html = msg.getHtmlBody();
                    } catch (ChunkNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (html != null && !html.isEmpty()) {
                    FileOutputStream output = null;
                    try {
                        output = new FileOutputStream(new File(newDir, filenamebody + ".html"));
                        byte[] bb = html.getBytes();
                        output.write(bb, 0, bb.length);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (output != null) {
                            try {
                                output.close();
                            } catch (IOException e) {
                            }
                        }
                    }
                    html = null;
                }
                if (isTxt || isHttp) {
                    try {
                        rtf = msg.getRtfBody();
                    } catch (ChunkNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (rtf != null && !rtf.isEmpty()) {
                    FileOutputStream output = null;
                    try {
                        output = new FileOutputStream(new File(newDir, filenamebody + ".rtf"));
                        byte[] bb = rtf.getBytes();
                        output.write(bb, 0, bb.length);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (output != null) {
                            try {
                                output.close();
                            } catch (IOException e) {
                            }
                        }
                    }
                    rtf = null;
                }
            }
        }
    }
    if (metadata.hasContent()) {
        root.add(metadata);
    }
    if (identification != null && identification.hasContent()) {
        root.add(identification);
    }
    if (argument.extractKeyword) {
        result = body + " " + result;
        body = null;
        ExtractInfo.exportMetadata(keywords, result, "", config, null);
        if (keywords.hasContent()) {
            root.add(keywords);
        }
    }
    root.addAttribute(EMAIL_FIELDS.status.name, "ok");
    //System.out.println("end of "+id);
    return result;
}

From source file:org.alfresco.repo.content.transform.MSGParser.java

License:Apache License

/**
 * Prepare extract multipart by filling attachment list.
 *
 * @param xhtml/*from  w  w w. j  av  a2  s . c  o  m*/
 *            the xhtml
 * @param msg
 *            the message
 * @param attachmentList
 *            is list with attachments to fill
 * @throws MessagingException
 *             the messaging exception
 * @throws IOException
 *             Signals that an I/O exception has occurred.
 * @throws SAXException
 *             the sAX exception
 * @throws TikaException
 *             the tika exception
 */
private void prepareExtractMultipart(XHTMLContentHandler xhtml, MAPIMessage msg, List<String> attachmentList)
        throws MessagingException, IOException, SAXException, TikaException {

    // Process the attachments
    for (AttachmentChunks attachment : msg.getAttachmentFiles()) {
        String filename = null;
        if (attachment.attachLongFileName != null) {
            filename = attachment.attachLongFileName.getValue();
        } else if (attachment.attachFileName != null) {
            filename = attachment.attachFileName.getValue();
        }

        if (filename != null && filename.length() > 0) {
            Chunk[] chunks = attachment.getChunks();
            String id = null;
            byte[] data = null;
            // String mimetype = null;
            for (Chunk chunk : chunks) {
                if (MAPIProperty.ATTACH_CONTENT_ID.id == chunk.getChunkId()) {
                    id = chunk.toString();
                    // } else if (MAPIProperty.ATTACH_MIME_TAG.id == chunk
                    // .getChunkId()) {
                    // mimetype = chunk.toString();
                } else if (MAPIProperty.ATTACH_DATA.id == chunk.getChunkId() && (chunk instanceof ByteChunk)) {
                    ByteChunk chunkByte = (ByteChunk) chunk;
                    data = chunkByte.getValue();

                }

            }
            if (id != null && data != null) {
                File file = new File(workingDirectory, System.currentTimeMillis() + "");
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                IOUtils.copy(new ByteArrayInputStream(data), fileOutputStream);
                IOUtils.closeQuietly(fileOutputStream);
                String src = file.getName();
                String replace = id.replace("<", "").replace(">", "");
                // String encodedData = new
                // String(Base64.encodeBase64(data));
                // String src = "data:" + mimetype + ";base64," +
                // encodedData;

                referencesCache.put(replace, src);
            } else {
                attachmentList.add(filename);
            }
        }

    }
}

From source file:org.silverpeas.core.mail.MsgMailExtractorIntegrationTest.java

License:Open Source License

/**
 * This unit test is support for MSG exploration solution testing.
 *
 * @throws Exception//from  w  ww  .java2  s .  c o  m
 */
@Test
public void readMailWithAttachmentsMSG() throws Exception {
    MAPIMessage msg = new MAPIMessage(getDocumentFromName(FILENAME_MAIL_WITH_ATTACHMENTS).getPath());
    msg.setReturnNullOnMissingChunk(true);

    assertThat(msg.getDisplayFrom(), is("Nicolas Eysseric"));
    assertThat(msg.getRecipientDetailsChunks(), is(notNullValue()));
    assertThat(msg.getRecipientDetailsChunks().length, is(2));
    assertThat(msg.getRecipientDetailsChunks()[0].getRecipientName(), is("Aurore ADR. DELISSNYDER"));
    assertThat(msg.getRecipientDetailsChunks()[0].getRecipientEmailAddress(),
            is("Aurore.DELISSNYDER@hydrostadium.fr"));
    assertThat(msg.getRecipientDetailsChunks()[1].getRecipientName(), is("Ludovic BERTIN"));
    assertThat(msg.getRecipientDetailsChunks()[1].getRecipientEmailAddress(),
            is("ludovic.bertin@oosphere.com"));
    AttachmentChunks[] attachments = msg.getAttachmentFiles();
    assertThat(attachments, is(notNullValue()));
    assertThat(attachments.length, is(2));
    if (attachments != null && attachments.length > 0) {
        System.out.print("\n");
        for (AttachmentChunks attachmentChunks : attachments) {
            System.out.println(attachmentChunks.attachFileName.getValue());
        }
    } else {
        System.out.println("None.");
    }

    System.out.println("DATE : " + DateUtil.getOutputDateAndHour(getMessageDate(msg), "fr"));

    System.out.println("BODY : ");
    System.out.println(">>>");
    System.out.println(getMessageBody(msg));
    System.out.println("<<<");
}

From source file:org.silverpeas.core.mail.MsgMailExtractorIT.java

License:Open Source License

/**
 * This unit test is support for MSG exploration solution testing.
 *
 * @throws Exception/*from   w  w w.jav a 2 s  . c  o m*/
 */
@Test
public void readMailWithAttachmentsMSG() throws Exception {
    MAPIMessage msg = new MAPIMessage(getDocumentFromName(FILENAME_MAIL_WITH_ATTACHMENTS).getPath());
    msg.setReturnNullOnMissingChunk(true);

    assertThat(msg.getDisplayFrom(), is("Nicolas Eysseric"));
    assertThat(msg.getRecipientDetailsChunks(), is(notNullValue()));
    assertThat(msg.getRecipientDetailsChunks().length, is(2));
    assertThat(msg.getRecipientDetailsChunks()[0].getRecipientName(), is("Aurore ADR. DELISSNYDER"));
    assertThat(msg.getRecipientDetailsChunks()[0].getRecipientEmailAddress(),
            is("Aurore.DELISSNYDER@hydrostadium.fr"));
    assertThat(msg.getRecipientDetailsChunks()[1].getRecipientName(), is("Ludovic BERTIN"));
    assertThat(msg.getRecipientDetailsChunks()[1].getRecipientEmailAddress(),
            is("ludovic.bertin@oosphere.com"));
    AttachmentChunks[] attachments = msg.getAttachmentFiles();
    assertThat(attachments, is(notNullValue()));
    assertThat(attachments.length, is(2));
    if (attachments != null && attachments.length > 0) {
        System.out.print("\n");
        for (AttachmentChunks attachmentChunks : attachments) {
            System.out.println(attachmentChunks.getAttachFileName().getValue());
        }
    } else {
        System.out.println("None.");
    }

    System.out.println("DATE : " + DateUtil.getOutputDateAndHour(getMessageDate(msg), "fr"));

    System.out.println("BODY : ");
    System.out.println(">>>");
    System.out.println(getMessageBody(msg));
    System.out.println("<<<");
}