mimeメッセージのコンテンツタイプについて1つの混乱があります。MIMEメッセージがあるとしましょう。マルチパートメッセージで、体の部分はこんな感じです
- プレーンテキスト、htmlテキストを含むMime本体部分(本文が太字の一部の文字など)
- アタッチメントを含む2番目のマイムボディパーツ、
- 1つのインライン画像を含む3番目のmimeボディ部分(cidでボディから参照されています)
ボディパーツを作成するとき、トップmimeメッセージのコンテンツタイプを明示的に設定してから、各ボディパーツを明示的に設定する必要がありますか?
はいの場合、上記の例では何をすべきですか?
multipart/alternative
HTML用に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
か、それともメールサーバーが内部で設定しますか?