【问题标题】:Sending inline images in email showing an attachment icon before clicking on the email?在单击电子邮件之前在电子邮件中发送显示附件图标的内联图像?
【发布时间】:2018-07-20 16:09:42
【问题描述】:

我正在使用下面的代码向用户发送电子邮件,它按预期工作。图像显示在电子邮件的 html 中。但最近注意到,在单击电子邮件之前也会显示一个附件图标。这是一个小问题,但有点烦人。很难理解为什么会发生这种情况以及如何阻止它?有任何想法吗?谢谢。

public static void send(String useremail, String htmlBody,Map<String, String> mapInlineImages, String subject, String internetAddress, String websiteFrom) throws MalformedURLException{
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);
        String msgBody = "...";
        try {
          Message msg = new MimeMessage(session);
          msg.setFrom(new InternetAddress(internetAddress, websiteFrom));
          msg.addRecipient(Message.RecipientType.TO,new InternetAddress(useremail, "Admin"));
          msg.setSubject(subject);
          msg.setText(msgBody);
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setContent(htmlBody, "text/html");
        Multipart multipart = new MimeMultipart("related");
        multipart.addBodyPart(messageBodyPart);
        if (mapInlineImages != null && mapInlineImages.size() > 0) {
            Set<String> setImageID = mapInlineImages.keySet();
            for (String contentId : setImageID) {
                MimeBodyPart imagePart = new MimeBodyPart();
                imagePart.setHeader("Content-ID", "<" + contentId + ">");
                imagePart.setDisposition(MimeBodyPart.INLINE);
                String imageFilePath = mapInlineImages.get(contentId);
                try {imagePart.attachFile(imageFilePath);
                } catch (IOException ex) {ex.printStackTrace();
                }multipart.addBodyPart(imagePart);}}
        msg.setContent(multipart);
        Transport.send(msg);
        } catch (AddressException e) {} 
        catch (MessagingException e) {} 
        catch (UnsupportedEncodingException e) {}
}

【问题讨论】:

  • 该附件图标可能只是您正在查看电子邮件的电子邮件客户端的一个功能。尝试在不同的客户端中查看它
  • 这可能是关于这个邮件客户端的更多问题。它可能会检测到内容类型不是 text/* 的部分的存在,并发出“有附件”的信号。为了不花太多时间,它使用简单的启发式算法,而不是完全解析和考虑所有选项。在不知道确切的客户端以及客户端在此版本中应用的机制的情况下,我们可能无法为此提出一个铁定的解决方案(而且很可能没有,您只会有忍受这个)。
  • 在 gmail 和 Outlook 中尝试过。我遇到了同样的问题...
  • 看起来你做对了。找到另一条包含 html 和图像的消息,并根据需要显示,并将该消息的 MIME 结构与您正在创建的消息进行比较。

标签: java email jakarta-mail html-email email-attachments


【解决方案1】:

添加imagePart.addHeader("Content-Type", "image/jpeg");

【讨论】:

  • 我的代码在 Gmail 上运行良好,但我在使用 Outlook 客户端时遇到了问题,图像显示为内联但也显示为附件。在我的情况下添加“image/png”解决了这个问题,现在附件图标不显示了。非常感谢。
猜你喜欢
  • 2011-11-22
  • 2014-12-05
  • 2017-06-26
  • 2013-08-23
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多