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
当我们从 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