0
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(); }
}

そして今、このタイプのメッセージのテキスト/プレーン、テキスト/htmlがうまくいきます。問題は、メッセージに添付ファイルがあり、コンテンツが HTML である場合の電子メールのマルチパート/関連であり、ニュースとそうでないものがあります。この行に依存していることに気付きました:

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

「0」の代わりに「partCount」が1つを除いてすべてを取得し、「0」の代わりに「1」が特定の1つを取得し、他のものを請求しない場合。numberOfParts この 1 つの特定のメッセージは "3" で、もう 1 つのメッセージは "2" です。何が間違っているのかわかりません。間違ったパラメータが渡されたのでしょうか?

4

1 に答える 1

0

どのような問題を解決しようとしているのかよくわかりませんが、念のため、このJavaMail FAQ エントリが役立つかもしれません。

multipart/mixed と multipart/related は、1 つのメイン パーツと、通常は「添付ファイル」と考えられるその他のパーツの束を持っているという点で非常に似ています。気質から、それが執着であることがわかる場合もあれば、そうでない場合もあります。一部のメーラーは、性質の使用においてあまり一貫していません。

珍しいケースの 1 つは multipart/alternative ですが、それがあなたが直面している問題のようには思えません。

于 2013-01-14T21:11:00.890 に答える