JavaMail不会阅读MimeMultipart电子邮件

时间:2013-01-14 12:08:02

标签: javamail

if (contentType.contains("multipart")) {
    // content may contain attachments
    Multipart multiPart = (Multipart) message.getContent();
    numberOfParts = multiPart.getCount();

    for (int partCount = 0; partCount < numberOfParts; partCount++) {

            BodyPart part = multiPart.getBodyPart(partCount);
        String disposition = part.getDisposition();
        InputStream inputStream = null;

        if (disposition == null)
        {


        MimeBodyPart mbp = (MimeBodyPart) multiPart.getBodyPart(partCount);
        if (mbp.getContent() instanceof MimeMultipart){

                MimeMultipart mmp = (MimeMultipart) mbp.getContent();

                messageContent = mmp.getBodyPart(0).getContent().toString();

            //System.out.println("bodyContent " + bodyContent);
        }
          else
        {        
                messageContent = multiPart.getBodyPart(partCount).getContent().toString();
         }
        }
        else if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
            // this part is attachment
            String fileName = part.getFileName();
            attachFiles += fileName + ", ";
            //part.saveFile(saveDirectory + File.separator + fileName);
        }else if (Part.INLINE.equalsIgnoreCase(part.getDisposition())) {
            // this part is attachment
            String fileName = part.getFileName();
            attachFiles += fileName + ", ";
           // mbp.saveFile(saveDirectory + File.separator + fileName);
        }
        else {
            // this part may be the message content
            messageContent = part.getContent().toString();
        }
    }

    if (attachFiles.length() > 1) {
        attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
    }
} else if (contentType.contains("text/plain") || contentType.contains("text/html")) {
    Object content = message.getContent();
    if (content != null) {messageContent = content.toString(); }
}

现在这种类型的消息文本/ plain,text / html运行良好。问题是电子邮件multipart / related当邮件有附件而内容是HTML,然后得到一些新闻而有些则没有。我注意到它依赖于这一行:

messageContent = mmp.getBodyPart(0)。 getContent()。 toString();

如果不是“0”而是“partCount”获得除了一个特定的所有,如果不是“0”是“1”,那么这个特定的并且不向其他人充电。 numberOfParts这个特定的消息是“3”而另一个是“2”。我不知道出了什么问题,可能会传递错误的参数?

1 个答案:

答案 0 :(得分:0)

我不确定您要解决的问题,但以防这JavaMail FAQ entry可能会有所帮助。

multipart / mixed和multipart / related非常相似,因为它们有一个主要部分和一堆通常被认为是“附件”的其他部分。有时,性格会告诉你它是一种依恋,有时它不会。有些邮寄者在使用处置方面并不十分一致。

其中一个不寻常的案例是多部分/另类,但听起来并不像你正在运行的问题。