【问题标题】:Inline attachment MIME type in Apache CameApache Camel 中的内联附件 MIME 类型
【发布时间】:2017-04-01 20:57:26
【问题描述】:

我想将图像添加为内联附件,使用以下代码一切正常

<img src="cid:logo.jpg">
in.addAttachment("cid:logo.jpg", new DataHandler(new FileDataSource("src/resources/logo.jpg")));

唯一的问题是,我无法在 Thunderbird 中将图像视为内联附件,因为内容类型是“application/octet-stream”,但它必须是“image/jpeg”才能正确显示。 当我像这样在 Apache Camel 中添加 MIME 类型时:

in.addAttachment("cid:logo.jpg", new DataHandler(new FileDataSource("src/resources/logo.jpg"), "image/jpeg"));

它抛出异常说“对于 MIME 类型图像/pjpeg 没有对象 DCH” 我该如何处理这个问题?!

【问题讨论】:

    标签: java apache-camel jakarta-mail


    【解决方案1】:

    不确定这是否真的是您的问题,但如果您查看文档 (http://camel.apache.org/mail.html),它会指出:

    Geronimo 邮件 .jar 图标 我们发现 geronimo 邮件 .jar (v1.6) 在轮询带有附件的邮件时存在错误。它无法正确识别 Content-Type。因此,如果您将 .jpeg 文件附加到邮件并对其进行轮询,则 Content-Type 将解析为 text/plain 而不是 image/jpeg。出于这个原因,我们添加了一个 org.apache.camel.component.ContentTypeResolver SPI 接口,它使您能够提供自己的实现并通过根据文件名返回正确的 Mime 类型来修复此错误。所以如果文件名以jpeg/jpg结尾,则可以返回image/jpeg。 您可以在 MailComponent 实例或 MailEndpoint 实例上设置自定义解析器。

    如果这是您的问题,解决方案是提供您自己的 ContentTypeResolver 实现

    【讨论】:

    • 普通附件的内容类型很好,但我的问题只是内联附件。我将尝试创建自己的实现,看看它是如何工作的
    • 使用自定义 ContentTypeResolver 确实改变了内容类型,但就像其他两种解决方案一样,图像在 Thunderbird 中无法正确显示!以下是所有这三种解决方案的完整标题: Content-Type: image/jpeg; name=cid:logo.jpeg Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename=logo.jpeg 请注意,我更改了 CID 名称
    【解决方案2】:

    按照this JavaMail FAQ entry 中的描述创建一个数据源,并在您的第一个示例中使用它来代替 FileDataSource。

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 2013-08-24
      • 2012-11-02
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2022-07-05
      相关资源
      最近更新 更多