gpt4 book ai didi

java - 设置 MimeMessage 的内容类型?

转载 作者:行者123 更新时间:2023-11-30 09:30:45 27 4
gpt4 key购买 nike

我对 MIME 消息的内容类型感到困惑。假设我有一条 MIME 消息。这是一个多部分的消息,正文部分是这样的

  1. 包含纯文本、html 文本的 Mime 正文部分(如一些字母粗体)
  2. 第二个包含附件的 mime 正文部分,
  3. 包含一个内联图像的第三个 mime 正文部分(从带有 cid 的正文引用)

当我创建正文部分时,我是否应该明确设置顶部 MIME 消息的内容类型,然后是每个正文部分?

如果是,它们在上面的例子中应该是什么?

multipart/alternative 推荐用于 html,multipart/mixed 推荐用于附件,multipart/related 推荐用于内联。我正在使用所有这些,那么完整消息和不同正文部分的内容类型应该是什么?

仅供引用,我尝试复制上述场景,其中我既没有为整个 MimeMessage 也没有为正文部分设置内容类型。

但我仍然得到预期的内容,如纯文本、正文中的粗体字母、附件、在正确位置的 james 上的内联图像

James 为何在不设置内容类型的情况下解释 MIME 消息和 body 部位,又为何以正确的方式显示它们?

引用代码

  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, multipart/related 作为Content-Type还是邮件服务器内部设置的?

最佳答案

如果我明白你想做什么,你想要一个具有这种结构的消息:

  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

这意味着三个嵌套的多部分片段。除了默认的“混合”之外,您需要为每个多部分片段指定子类型。

multipart/mixed 和 multipart/alternative 片段相对简单。多部分/相关部分更复杂,您可能需要阅读 RFC 2387和/或查找一些其他教程来帮助您。

您可以通过摆脱 multipart/related 并让 html 文本引用互联网上某处的图像来简化结构。

您还应该测试具有这种结构的消息是否会被您关心的所有邮件阅读器正确显示。有些邮件阅读器会比其他结构复杂的邮件阅读器做得更好。

关于java - 设置 MimeMessage 的内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13135593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com