Apple 或 Mac Mail 会打开所有附件图像,即使它们是嵌入的

Apple or Mac Mail opens all attachment images even when they are embedded

当我们从 tomcat 服务器发送电子邮件时,实施 MimeMultiPart,它在大多数邮件软件中打开都很好,例如Gmail、Outlook 和 Android 邮件。 但是在Apple Mail上打开时,会自动打开PDF和图片,在手机(phone和平板电脑,笔记本电脑可以在命令中更改)是永久的。

这是为 Apple 设计的,正如我在几个网站上看到的那样。 问题是,即使是嵌入的,据说是隐藏的附件,也会显示出来。 这会导致双重图像,因为我们在邮件中通过 html 调用嵌入。

该图像是一个徽标,所以它总是通过电子邮件发送。我希望我可以使用一种不同的协议,它也适用于 Apple 邮件。我在网络上没有看到类似的问题,所以我希望我们只是使用了一些不同的协议。

    BodyPart messageBodyPart = new MimeBodyPart();
    String htmlText = message + "<img src=\"cid:image123\">";
    messageBodyPart.setContent(htmlText, "text/html; charset=UTF-8");

    MimeMultipart mp = new MimeMultipart("mixed");
    mp.addBodyPart(messageBodyPart);

    BodyPart imageBodyPart = new MimeBodyPart();
    String file = this.getClass().getClassLoader().getResource("images/Logo.gif").getFile();
    DataSource fds = new FileDataSource(file);
    imageBodyPart.setFileName("Logo.gif");
    imageBodyPart.setHeader("Content-ID","<image123>");
    imageBodyPart.setDisposition(Part.INLINE);

    mp.addBodyPart(imageBodyPart);

当我删除HTML代码后,它仍然在Apple邮件中显示附件图像,但是,它不会在其他电子邮件软件中完全显示。

我以前也见过这种行为,我记得这是由于 iOS 设备上的 MIME header 解析逻辑不同所致。

其他 post(和相应的答案)参考并应指导您找到可行的解决方案:Problem sending multipart mail using ActionMailer

祝你好运,请告诉我们你的进展情况。

终于在投入生产的路上出现了缺陷。 MIME 结构略有变化

我做的是构建,

  • 混合 +
    • 相关+
    • html
    • 内联图片
  • 附件
  • 附件

省略带附件的选项是因为不知何故,在撰写本文时,雅虎在线客户端并未显示它们。将它们混合使用效果很好。

经过测试并适用于

  • Apple/IOS 邮件(平板电脑 Ipad 2)
  • Outlook Windows 7 客户端
  • Outlook 移动版 (Android)
  • Gmail 网络客户端
  • Gmail 移动版(Android)
  • Android 手机邮箱 (Lollipop)
  • 雅虎网络客户端
  • 雅虎移动邮箱 (Android)
  • Lotus Notes Windows 7 客户端

注:Android使用的是Samsung Note 4 Lollipop

代码:

    BodyPart messageBodyPart = new MimeBodyPart();
    String htmlText = message + "<img src=\"cid:image123\">";
    messageBodyPart.setContent(htmlText, "text/html; charset=UTF-8");

    MimeMultipart mpRelated = new MimeMultipart("relative");
    mpRelated.addBodyPart(messageBodyPart);

    BodyPart imageBodyPart = new MimeBodyPart();
    String file = this.getClass().getClassLoader().getResource("images/Logo.gif").getFile();
    DataSource fds = new FileDataSource(file);
    imageBodyPart.setFileName("Logo.gif");
    imageBodyPart.setHeader("Content-ID","<image123>");
    imageBodyPart.setDisposition(Part.INLINE);

    mpRelated.addBodyPart(imageBodyPart);

    MimeMultipart mpMixed = new MimeMultipart("mixed");
    //Nest Related into mixed
    BodyPart relatedInMixed = new MimeBodyPart();
    relatedInMixed.setContent(mpRelated);
    mpMixed.addBodyPart(relatedInMixed);

    //TODO Add attachement to mpMixed