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

Posted

技术标签:

【中文标题】Apple 或 Mac Mail 会打开所有附件图像,即使它们是嵌入的【英文标题】:Apple or Mac Mail opens all attachment images even when they are embedded 【发布时间】:2016-07-03 18:04:57 【问题描述】:

当我们从我们的 tomcat 服务器发送一封电子邮件,实现 MimeMultiPart 时,它在大多数邮件软件中都可以正常打开,例如Gmail、Outlook 和 android 邮件。 但是在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 邮件中显示附件图像,但是,它不会在其他电子邮件软件中完全显示。

【问题讨论】:

【参考方案1】:

我以前也看到过这种行为,我记得这是由于 ios 设备上的 MIME 标头解析逻辑不同。

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

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

【讨论】:

我认为 nil 是一种特殊的性格......我想我会尝试使其为 null 或空白。 没用,只是将处置留空。它在 Gmail 和 Outlook 中仍然可以正常工作。但是IOS邮件不太稳定,有时候logo会在文字中间。我会在星期一再次查看它,以确保它没有默认值。【参考方案2】:

缺陷最终进入生产阶段。 MIME 结构与https://***.com/a/23853079/4558510 略有不同

我所做的是构建,

混合 + 相关+ html 内嵌图片 附件 附件

省略了附件的替代方案,因为在撰写本文时,雅虎在线客户端没有显示它们。将它们混合在一起效果很好。

经过测试和使用,

Apple/IOS 邮件(平板 Ipad 2) Outlook Windows 7 客户端 Outlook 移动版 (Android) Gmail 网络客户端 Gmail 移动版 (Android) Android 移动电子邮件(棒棒糖) 雅虎网络客户端 雅虎移动电子邮件 (Android) Lo​​tus Notes Windows 7 客户端

注意:使用的 Android 是三星 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

【讨论】:

以上是关于Apple 或 Mac Mail 会打开所有附件图像,即使它们是嵌入的的主要内容,如果未能解决你的问题,请参考以下文章

(目标 C)打开默认的 Apple Mail 应用程序、Yahoo Mail 或 Safari,而没有撰写屏幕?

使用 iOS 中的共享扩展从 Mail App 共享附件

Apple Mail 不显示使用 Zend_Mail 发送的 PDF

使用 Zend_Mail 时添加 PDF 附件

脚本桥、Apple Mail、HTML 和头文件

Java mail发送邮件附件出现.eml文件夹