【问题标题】:Embedding attached images in HTML emails在 HTML 电子邮件中嵌入附加图像
【发布时间】:2010-10-29 16:53:08
【问题描述】:

如果我将图像附加到电子邮件中,如何将其放置在 HTML 内容中?我尝试只使用文件名作为图像源,但这似乎不起作用。

【问题讨论】:

  • 您是尝试以编程方式还是通过电子邮件客户端执行此操作?

标签: email mime


【解决方案1】:

更具体地说明您如何构建 HTML 邮件消息。

结果将是一个多部分 MIME 消息,其中包含一个 text/html 部分(如果您真的使用 text/plain 类型的替代部分正确地做到了)和几个图像,然后从 HTML 中引用这些图像。

请参阅RFC 1813RFC 2378,了解有关混合 MIME 和相关数据中的 content-id 的更多信息(在 HTML 源代码中由 CID 引用)。

【讨论】:

  • 它被构建为包含 html 和图像部分的多部分 MIME 消息。如果我正确阅读了这些 RFC,听起来我只需要在图像附件上放置一个内容 id,然后使用 cid:xxx 作为图像源。
  • 这是正确的,如果其他所有内容都已在 MIME 消息中就位,那么嵌入它们很容易。
  • 这是一个非常糟糕、不完整的问题。 @deem 下面的回答实际上回答了这个问题;提到的两个 RFC 根本没有讨论 HTML 或 URI 方案。
【解决方案2】:

您可以对img 标签的src="cid:bgBoletin" 属性使用相同的方式。

【讨论】:

    【解决方案3】:

    您的问题的答案在春季文档here

     mailSender.send(new MimeMessagePreparator() {
       public void prepare(MimeMessage mimeMessage) throws MessagingException {
         MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
         message.setFrom("me@mail.com");
         message.setTo("you@mail.com");
         message.setSubject("my subject");
         message.setText("my text <img src='cid:myLogo'>", true);
         message.addInline("myLogo", new ClassPathResource("img/mylogo.gif"));
       }
     });
    

    消息的正文是多部分消息的一部分(注意第二个参数在 MimeMessageHelper 的构造函数中设置为 true,它将消息设置为多部分消息)。

    message.addInline("myLogo"... 行将图像添加为多部分消息的另一部分。

    您可以使用.setText 设置电子邮件的正文(HTML 内容)。

    您可以使用标签 cid 来引用多部分电子邮件的其他部分(您的图像)。注意 img src 属性是src='cid:myLogo'。 cid 是图像的内容 ID,作为多部分消息的一部分发送。

    【讨论】:

    • 请发布您的课程 MimeMessage MimeMessageHelper ,或直接 .jar
    • 看起来message.addInline 需要在message.setText 之后,否则文件将不会附加到电子邮件中
    【解决方案4】:

    图片附件部分需要Content-ID

    --T4nu9J8b
    Content-Type: image/png
    Content-ID: <idname>
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment ;filename="testimage.png"
    
    iVBORw0KGgoAAAANS...
    --T4nu9J8b--
    

    注意:Content-ID 名称应放在尖括号中,如给定的那样

    使用相同的 Content-ID 将其嵌入到标签中(不带尖括号)

    <img alt="Embedded Image" src="cid:idname"/>
    

    这应该允许附加的图像显示到 HTML 中!

    【讨论】:

      【解决方案5】:

      我就是这样做的

      _mime = new MimeMultipart();
      BodyPart messageBodyPart = new MimeBodyPart();
      messageBodyPart = new MimeBodyPart();
      DataSource fds = new FileDataSource("C:\\bgBoletin.jpg");
      
      messageBodyPart.setDataHandler(new DataHandler(fds));
      messageBodyPart.setHeader("Content-ID", "<bgBoletin>");
      _mime.addBodyPart(messageBodyPart);
      

      并且在 HTM 文件中以这种方式引用 de Content-ID 背景:url(cid:bgBoletin)。

      【讨论】:

      • 你的班级是MAIL ?...使用“MimeMultipart”->班级激活?
      • 不起作用......
      【解决方案6】:

      选项 01:
      - 将文件“mySignaturePictue.jpg”作为附件附加到邮件
      - 从正文中引用此附件(插入),代码如下:
      &lt;img src="cid:mySignaturePicture.png"&gt;

      选项 02:
      - 将您的图像转换为 base64 字符串:http://www.motobit.com/util/base64-decoder-encoder.asp
      - 使用
      &lt;img alt="My Image" src="data:image/jpeg;base64,AWWhcalkjsd/beginning/RXhp/of+/long/base64cod/ZgAATU0/+BlaBlubbZ5u8/61a+Xand/much/more..." /&gt;
      之类的代码将其插入到 mailtext/html-body - 缺点:这被大多数客户端阻止并且会增加邮件大小,请参阅:https://www.campaignmonitor.com/blog/email-marketing/2013/02/embedded-images-in-html-email/https://www.paperstreet.com/blog/email-marketing-embeded-images-cid-what-a-mess/

      【讨论】:

        【解决方案7】:

        如果这与从您正在开发的网站发送电子邮件有关,只需将图像保存在您的服务器上,然后使用&lt;img src="url"/&gt; 链接到它们。

        【讨论】:

        • ...大多数现代邮件应用程序出于安全原因不会显示这些图像,除非用户明确确认。嵌入(小)图像要好得多,以确保消息按预期显示(或者,这更有可能)。
        • 在我看来,@Lucero 积极规避应用程序行为是禁忌。用户选择使用给定的应用程序因为其功能,实际上可能会因为有人特意绕过此功能而感到生气。大多数现代邮件应用程序还为您提供始终查看来自特定发件人(甚至域)的图像的选项,让用户决定他们将来是否要查看您的图像。
        • @NathanCox,这根本不是绕过功能。电子邮件客户端不下载图像以保护用户不被暴露(当网址被个性化时,发件人可以知道邮件何时被阅读,并且电子邮件地址仍然有效并且正在使用中)。不显示链接的图像是一种安全措施,与用户查看图像的偏好无关(这是某些电子邮件客户端中的单独设置)。
        • @Lucero 我想我从未使用过将两个选项分开的客户端。我的经验一直是,如果您想禁止下载图片(例如,如果您使用的是付费带宽连接,例如航空卡或手机),该选项直接与安全功能相关。跨度>
        • @NathanCox,在按带宽付费的连接上,您通常控制是否下载附件。嵌入的图像是 MIME 附件(没有文件名,但有一个 ID),因此电子邮件客户端应该只在您的设置说不下载附件时才下载文本。
        猜你喜欢
        • 2011-04-16
        • 2011-10-06
        • 2015-03-14
        • 2020-12-14
        • 2016-11-06
        • 2010-12-23
        • 2019-02-02
        • 2013-05-24
        相关资源
        最近更新 更多