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

时间:2016-03-17 11:50:19

标签: java ios email mime

当我们从我们的tomcat服务器发送电子邮件,实现MimeMultiPart时,它在大多数邮件软件中打开就好了,例如Gmail,Outlook,& Android Mail。 但是当它在Apple Mail上打开时,它会自动打开PDF和图像,这在移动设备中是永久性的(手机和平板电脑,因为笔记本电脑可以在命令中更改)。

这就是它为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邮件中显示附加图像,但是,它不会完全显示在其他电子邮件软件中。

2 个答案:

答案 0 :(得分:0)

我之前也见过这种行为,我记得这是因为iOS设备上的MIME头解析逻辑存在差异。

此其他帖子(以及相应的答案)引用并指导您找到可行的解决方案:Problem sending multipart mail using ActionMailer

祝你好运,请告诉我们您是如何继续的。

答案 1 :(得分:0)

最终导致生产失败。 MIME结构略有不同https://stackoverflow.com/a/23853079/4558510

我所做的是构建,

  • 混合+
    • 相关+
    • HTML
    • 内嵌图片
  • 附接
  • 附接

因为不知何故,在撰写本文时,雅虎在线客户端没有显示它们。将它们混合在一起工作正常。

经过测试和使用,

  • Apple / IOS Mail(Tablet Ipad 2)
  • Outlook Windows 7客户端
  • Outlook mobile(Android)
  • Gmail网络客户端
  • Gmail移动版(Android)
  • Android手机电子邮件(Lollipop)
  • Yahoo web client
  • Yahoo mobile Email(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