3

mimeメッセージのコンテンツタイプについて1つの混乱があります。MIMEメッセージがあるとしましょう。マルチパートメッセージで、体の部分はこんな感じです

  1. プレーンテキスト、htmlテキストを含むMime本体部分(本文が太字の一部の文字など)
  2. アタッチメントを含む2番目のマイムボディパーツ、
  3. 1つのインライン画像を含む3番目のmimeボディ部分(cidでボディから参照されています)

ボディパーツを作成するとき、トップmimeメッセージのコンテンツタイプを明示的に設定してから、各ボディパーツを明示的に設定する必要がありますか?

はいの場合、上記の例では何をすべきですか?

multipart/alternativeHTML用にmultipart/mixed提案され、添付ファイル用にmultipart/related提案され、インライン用に提案されます。私はそれらすべてを使用しているので、完全なメッセージとさまざまなボディパーツのコンテンツタイプは何である必要がありますか?

参考までに、MimeMessage全体にもボディパーツにもコンテンツタイプを設定しなかった上記のシナリオを複製しようとしました。

しかし、それでも私はプレーンテキスト、本文の太字、添付ファイル、適切な場所のジェームズのインライン画像などの期待されるものを取得します

ジェームズがコンテンツタイプを設定せずにmimeメッセージと本文の部分を解釈するのはなぜですか。また、それらを正しい方法で表示するのはなぜですか。

参照用コード

  MimeMessage   msg = new MimeMessage(mailSession);
  MimeMultipart mpart = new MimeMultipart();
  MimeBodyPart bp = new MimeBodyPart();
  bp.setText("plain text and html text like<b>Test</>", CHARSET_UTF_8, MESSAGE_HTML_CONTENT_TYPE);
  // add message body
  mpart.addBodyPart(bp);

 // adding attachment
  MimeBodyPart bodyPart = new MimeBodyPart();
  bodyPart.setFileName("WordFile1");
  file = new File("word file");
  DataSource source = new FileDataSource(file);
  bodyPart.setDataHandler(new DataHandler(source));
  mpart.addBodyPart(bodyPart);


 // adding image inline
  MimeBodyPart bodyPart2 = new MimeBodyPart();
  bodyPart2.setFileName("inline image");
  file2 = new File("image1");
  DataSource source2 = new FileDataSource(file);
  bodyPart2.setDataHandler(new DataHandler(source));
  bodyPart2.setDisposition(MimeBodyPart.INLINE);
  bodyPart2.setHeader("Content-ID", "Unique-CntentId");
  bodyPart2.setHeader("Content-Type", "image/jpeg");
  mpart.addBodyPart(bodyPart2);

  // At last setting multipart In MimeMessage
  msg.setContent(mpart);

上記のコードを使用すると、Jamesと統合されたThunderBirdの適切な場所で、正しいhtmlテキスト、プレーンテキスト、インラインイメージ、および添付ファイルを取得できます。

multipart/mixed、、multipart/alternativeをContent-Typeとして設定するタイミングと場所がわかりませんmultipart/relatedか、それともメールサーバーが内部で設定しますか?

4

1 に答える 1

2

あなたがやろうとしていることを私が理解しているなら、あなたはこの構造のメッセージが欲しいでしょう:

  multipart/mixed
    multipart/alternative
      text/plain - a plain text version of the main message body
      multipart/related
        text/html - the html version of the main message body
        image/jpeg - an image referenced by the main body
    application/octet-stream (or whatever) - the attachment

これは、3つのネストされたマルチパートピースを意味します。デフォルトの「混合」以外の各マルチパートピースのサブタイプを指定する必要があります。

マルチパート/ミックスおよびマルチパート/オルタナティブピースは比較的簡単です。マルチパート/関連する部分はより複雑であり、RFC 2387を読んだり、それを支援する他のチュートリアルを見つけたりすることをお勧めします。

multipart / relatedを取り除き、htmlテキストにインターネット上のどこかの画像を参照させるだけで構造を単純化できます。

また、この構造のメッセージが、関心のあるすべてのメールリーダーによって正しく表示されることをテストする必要があります。一部のメールリーダーは、このような複雑な構造を持つ他のリーダーよりも優れた仕事をします。

于 2012-10-30T18:21:17.590 に答える