设置 MimeMessage 的内容类型?

2024-02-28

我对哑剧消息的内容类型有一个困惑。假设我有一条哑剧消息。这是一条多部分消息,正文部分如下

  1. Mime 正文部分包含纯文本、html 文本(如中的一些字母) 正文加粗)
  2. 第二个哑剧身体部分包含附件,
  3. 第三个哑剧正文部分包含一张内联图像(通过 cid 从正文引用)

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

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

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

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

但我仍然得到了预期的东西,比如纯文本、正文中的粗体字母、附件、詹姆斯上正确位置的内联图像

为什么詹姆斯在没有设置内容类型的情况下解释哑剧信息和身体部位,以及为什么它以正确的方式显示它们?

参考代码

  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

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

多部分/混合和多部分/另类作品相对简单。多部分/相关文章更复杂,您可能想阅读RFC 2387 https://www.rfc-editor.org/rfc/rfc2387和/或找到一些其他教程来帮助您。

您可以通过摆脱多部分/相关内容并仅让 html 文本引用互联网上某处的图像来简化结构。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 MimeMessage 的内容类型? 的相关文章

随机推荐

  • 将 JLabel 移动到其他 JLabel - GUI

    我正在尝试使 JLabel 跨其他 JLabel 移动 目前只有 1 个计时器在工作 它的运行方式应该像火车穿过铁轨一样 绕着铁轨一路行驶 最终回到起点 我不知道如何让它一路顺利 任何帮助都是值得赞赏的 谢谢 import java awt
  • 如何从节点脚本运行 gulp 任务

    我有一个节点脚本 我想运行同一脚本中的 gulp 任务 我该如何调用它 usr bin env node var gulp require gulp gulp task default function arg How do I call
  • 在 C++ 中,当子类化时,为什么有时需要为重写函数添加 virtual 关键字?

    为什么我有时会在 C 示例中看到在谈论子类 继承时 基类有 virtual 关键字 有时重写的函数也有 virtual 关键字 为什么有时需要向子类添加 virtual 关键字 例如 class Base Base virtual void
  • Javascript 与 PHP 一起运行后获取 URL 的内容(文本)

    是否可以使用 PHP 获取 URL 的内容 使用某种函数 例如file get contents or header 但只有在执行一些 JavaScript 代码之后 Example mysite com 有一个脚本可以实现loadUrlA
  • Response.Flush() 抛出 System.Web.HttpException

    我有一个 HttpHandler 用于处理客户端网站上的某些图像 当我将图像流输出到响应对象并调用 Flush 时 偶尔会引发错误 这是一个代码块 var image Image FromStream memStream if size g
  • 如何从嵌入式 JAR 文件加载资源

    我正在尝试加载嵌入 JAR 文件中包含的资源 该项目实际部署在JBoss http en wikipedia org wiki JBoss使用一个EAR http en wikipedia org wiki EAR 28file forma
  • 在 JSON FabricJS 中包含图像数据

    我正在尝试使用 FabricJS 画布 并且想将画布导出为 JSON 我尝试使用两者加载图像new fabric Image and fabric Image fromURL他们俩都很好用 现在我想从画布获取 JSON 但我想要 2 种 J
  • 如何将 pytest-aiohttp 装置与范围会话一起使用

    我正在尝试为 aiohttp 应用程序编写测试 我正在使用 pytest aiohttp 插件 我的目的是在第一次测试执行之前初始化并运行应用程序一次 并在所有测试完成后拆除 pytest aiohttp 固定装置 例如 loop test
  • 在 .NET 中创建 Active Directory 用户 (C#)

    我需要在 Active Directory 中创建一个新用户 我发现了几个例子 如下所示 using System using System DirectoryServices namespace test class Program st
  • Java 9 中的类加载器层次结构

    从 Java 8 开始 我知道类加载器的层次结构如下 引导类加载器 扩展类加载器 应用程序类加载器 Java 9 中类加载器的层次结构有何变化以及它是如何工作的 这里是迁移指南 https docs oracle com javase 9
  • getComputedStyle 规范中是否指定了颜色格式?

    我正在解析返回的颜色字符串getComputedStyle to get R G B and A从中获取价值 到目前为止 在 Chrome 和 Firefox 中 颜色值似乎总是返回rgb or rgba易于解析的格式 const r g
  • 在选项卡式活动中将 sqlite 数据库中的所有数据显示到列表视图中

    作为 Android 开发的新手 我已经在这个问题上被困了几个星期了 而且越来越累了 在查看了每个教程并阅读了我能找到的每个问题和答案之后 我仍然不知道如何让 Android Studio 只获取 SQLite 数据库中的内容并将其内容粘贴
  • 未找到 EGLConfig

    我正在尝试使用 android 制作简单的游戏AndEngine教程 http www raywenderlich com 12065 how to create a simple android game 现在 当我运行该项目时 我收到错
  • AngularJS 只有 ng-repeat 动画中的第一个元素

    由于某种原因 使用下面的代码 ngRepeat 仅对第一个项目进行动画处理并立即显示其余项目 一旦scope categories项目已更新 模板中触发了 ng repeat dataSource getCategories then fu
  • C++ 复制构造函数和浅复制

    假设我有一个类 其中有许多显式 静态分配 成员和一些动态分配的指针 当我声明一个复制构造函数时 我对手动分配的成员进行了深层复制 我不想显式地复制每个静态分配的成员 如何在显式复制构造函数中使用隐式 默认 复制构造函数功能 Use 遏制 c
  • 如何使用 PKAddPassButton 添加“添加到 Apple 钱包”按钮 - swift

    抱歉 如果这听起来很愚蠢 这里完全是菜鸟 我正在尝试创建 添加到Apple Wallet 按钮 但我不知道怎么办 我已经尝试过代码片段here https stackoverflow com questions 49773184 how t
  • MFMessageComposeViewController 中 MessageComposeResult 的条件与 swift [重复]

    这个问题在这里已经有答案了 我正在尝试实现 MFMessageComposeViewControllerDelegate 所需的方法 func messageComposeViewController controller MFMessag
  • AngularJS http.post() 返回 404

    祝大家圣诞快乐 我正在使用 Phonegap AngularJS 应用程序 我正在尝试创建一个 http Post 但它返回 404 错误 我尝试使用 jquery 1 10 2 进行 POST 它有效 我已经为此花费了几天时间 这是完成应
  • 试图阻止 jQuery Mobile 滑动手势冒泡,但它不起作用

    我正在使用 jQuery Mobile 并创建了一些类似于 Android Holo Tabs 的东西 http note io 18RNMRk http note io 18RNMRk 为了使滑动手势能够在选项卡之间切换 这是我添加的代码
  • 设置 MimeMessage 的内容类型?

    我对哑剧消息的内容类型有一个困惑 假设我有一条哑剧消息 这是一条多部分消息 正文部分如下 Mime 正文部分包含纯文本 html 文本 如中的一些字母 正文加粗 第二个哑剧身体部分包含附件 第三个哑剧正文部分包含一张内联图像 通过 cid