Example usage for javax.mail BodyPart getInputStream

List of usage examples for javax.mail BodyPart getInputStream

Introduction

In this page you can find the example usage for javax.mail BodyPart getInputStream.

Prototype

public InputStream getInputStream() throws IOException, MessagingException;

Source Link

Document

Return an input stream for this part's "content".

Usage

From source file:immf.SendMailBridge.java

private void parseBodypartmixed(SenderMail sendMail, BodyPart bp, String subtype, String parentSubtype)
        throws IOException {
    boolean limiterr = false;
    String badfile = null;//from  w ww .  j a  va  2s  .c  om
    try {
        String contentType = bp.getContentType().toLowerCase();
        log.info("Bodypart ContentType:" + contentType);
        log.info("subtype:" + subtype);

        if (contentType.startsWith("multipart/")) {
            parseMultipart(sendMail, (Multipart) bp.getContent(), getSubtype(contentType), subtype);

        } else if (sendMail.getPlainTextContent() == null && contentType.startsWith("text/plain")) {
            // ???plain/text?
            String content = (String) bp.getContent();
            log.info("set Content text [" + content + "]");
            String charset = (new ContentType(contentType)).getParameter("charset");
            content = this.charConv.convert(content, charset);
            log.debug(" conv " + content);
            sendMail.setPlainTextContent(content);

            // HTML??????<br>????????HtmlConverter?
            // ??????HTML???HTML???????
            if (sendMail.getHtmlWorkingContent() == null) {
                sendMail.setHtmlWorkingContent(
                        "<body>" + Util.easyEscapeHtml(content).replaceAll("\\r\\n", "<br>") + "<br>");
            } else {
                sendMail.addHtmlWorkingContent(
                        Util.easyEscapeHtml(content).replaceAll("\\r\\n", "<br>") + "<br>");
            }

        } else if (sendMail.getHtmlContent() == null && contentType.startsWith("text/html")
                && (parentSubtype.equalsIgnoreCase("alternative")
                        || parentSubtype.equalsIgnoreCase("related"))) {
            // ???text/html
            String content = (String) bp.getContent();
            log.info("set Content html [" + content + "]");
            String charset = (new ContentType(contentType)).getParameter("charset");
            // 2?3?HTML?????????</body>???????
            content = this.charConv.convert(content, charset);
            content = HtmlConvert.replaceAllCaseInsenstive(content, "</body>.*", "");
            log.debug(" conv " + content);
            sendMail.setHtmlContent(content);

        } else {
            log.debug("attach");
            // ????

            String contentDisposition = bp.getDisposition();
            if (contentDisposition != null && contentDisposition.equalsIgnoreCase(Part.INLINE)) {
                // 
                SenderAttachment file = new SenderAttachment();
                String uniqId = uniqId();
                String fname = uniqId;
                String fname2 = Util.getFileName(bp);

                // iPhone?gifpng?????????????gif??(?png???gif?)
                if (getSubtype(contentType).equalsIgnoreCase("png")) {
                    file.setContentType("image/gif");
                    fname = fname + ".gif";
                    fname2 = getBasename(fname2) + ".gif";
                    file.setData(inputstream2bytes(Util.png2gif(bp.getInputStream())));
                } else {
                    file.setContentType(contentType);
                    fname = fname + "." + getSubtype(contentType);
                    file.setData(inputstream2bytes(bp.getInputStream()));
                }

                file.setInline(true);
                boolean inline = !this.forcePlainText & sendMail.checkAttachmentCapability(file);
                if (!inline) {
                    file.setInline(false);
                    if (!sendMail.checkAttachmentCapability(file)) {
                        limiterr = true;
                        badfile = fname2;
                        throw new Exception("Attachments: size limit or file count limit exceeds!");
                    }
                }

                if (inline) {
                    file.setFilename(fname);
                    if (bp.getHeader("Content-Id") == null) {
                        file.setContentId(uniqId);
                    } else {
                        file.setContentId(bp.getHeader("Content-Id")[0]);
                    }
                    log.info("Inline Attachment(mixed) " + file.loggingString() + ", Hash:" + file.getHash());

                    // ??HTML?
                    if (sendMail.getHtmlContent() != null) {
                        sendMail.addHtmlContent("<img src=\"cid:" + file.getContentId() + "\"><br>");
                    }
                    if (sendMail.getHtmlWorkingContent() == null) {
                        sendMail.setHtmlWorkingContent(
                                "<body><img src=\"cid:" + file.getContentId() + "\"><br>");
                    } else {
                        sendMail.addHtmlWorkingContent("<img src=\"cid:" + file.getContentId() + "\"><br>");
                    }
                } else {
                    file.setFilename(fname2);
                    log.info("Attachment " + file.loggingString());
                }
                sendMail.addAttachmentFileIdList(file);

            } else {
                // ?
                SenderAttachment file = new SenderAttachment();
                file.setInline(false);
                file.setContentType(contentType);
                String fname = Util.getFileName(bp);
                if (fname == null && sendMail.getPlainTextContent() != null
                        && contentType.startsWith("text/plain")) {
                    // ???????
                    String content = (String) bp.getContent();
                    log.info("add Content text [" + content + "]");
                    String charset = (new ContentType(contentType)).getParameter("charset");
                    content = this.charConv.convert(content, charset);
                    log.debug(" conv " + content);

                    // ??HTML????<br>
                    sendMail.addPlainTextContent("\n" + content);
                    sendMail.addHtmlWorkingContent(
                            Util.easyEscapeHtml(content).replaceAll("\\r\\n", "<br>") + "<br>");

                } else if (fname == null && sendMail.getHtmlContent() != null
                        && contentType.startsWith("text/html") && (parentSubtype.equalsIgnoreCase("alternative")
                                || parentSubtype.equalsIgnoreCase("related"))) {
                    // ????text/html????
                    String content = (String) bp.getContent();
                    log.info("add Content html [" + content + "]");
                    String charset = (new ContentType(contentType)).getParameter("charset");
                    content = this.charConv.convert(content, charset);
                    content = HtmlConvert.replaceAllCaseInsenstive(content, ".*<body[^>]*>", "");
                    content = HtmlConvert.replaceAllCaseInsenstive(content, "</body>.*", "");
                    log.debug(" conv " + content);
                    sendMail.addHtmlContent(content);

                } else {
                    // ??????
                    if (getSubtype(contentType).equalsIgnoreCase("png")) {
                        file.setContentType("image/gif");
                        file.setFilename(getBasename(fname) + ".gif");
                        file.setData(inputstream2bytes(Util.png2gif(bp.getInputStream())));
                    } else {
                        file.setFilename(fname);
                        file.setData(inputstream2bytes(bp.getInputStream()));
                    }
                    if (!sendMail.checkAttachmentCapability(file)) {
                        limiterr = true;
                        badfile = file.getFilename();
                        throw new Exception("Attachments: size limit or file count limit exceeds!");
                    }
                    sendMail.addAttachmentFileIdList(file);
                    log.info("Attachment " + file.loggingString());

                }
            }
        }
    } catch (Exception e) {
        log.error("parse bodypart error(mixed).", e);
        if (limiterr) {
            sendMail.addPlainTextContent("\n[(" + badfile + ")]");
            if (sendMail.getHtmlContent() != null) {
                sendMail.addHtmlContent("[(" + badfile + ")]<br>");
            }
            if (sendMail.getHtmlWorkingContent() == null) {
                sendMail.setHtmlWorkingContent("<body>[(" + badfile + ")]<br>");
            } else {
                sendMail.addHtmlWorkingContent("[(" + badfile + ")]<br>");
            }
        } else {
            throw new IOException("BodyPart error(mixed)." + e.getMessage(), e);
        }
    }
}