Java 在单击电子邮件之前,是否在电子邮件中发送显示附件图标的内联图像?
我正在使用下面的代码向用户发送电子邮件,它按预期工作。这些图像显示在电子邮件的html中。但最近注意到,在点击电子邮件之前也会出现一个附件图标。这是个小问题,但有点烦人。很难理解为什么会发生这种情况以及如何阻止它?有什么想法吗?谢谢Java 在单击电子邮件之前,是否在电子邮件中发送显示附件图标的内联图像?,java,email,jakarta-mail,html-email,email-attachments,Java,Email,Jakarta Mail,Html Email,Email Attachments,我正在使用下面的代码向用户发送电子邮件,它按预期工作。这些图像显示在电子邮件的html中。但最近注意到,在点击电子邮件之前也会出现一个附件图标。这是个小问题,但有点烦人。很难理解为什么会发生这种情况以及如何阻止它?有什么想法吗?谢谢 publicstaticvoidsend(stringuseremail、stringhtmlbody、Map-mapInlineImages、stringsubject、stringinternetaddress、stringwebsitefrom)抛出了错误的
publicstaticvoidsend(stringuseremail、stringhtmlbody、Map-mapInlineImages、stringsubject、stringinternetaddress、stringwebsitefrom)抛出了错误的格式异常{
Properties props=新属性();
Session Session=Session.getDefaultInstance(props,null);
字符串msgBody=“…”;
试一试{
Message msg=新的mimessage(会话);
msg.setFrom(新的InternetAddress(InternetAddress,websiteFrom));
msg.addRecipient(Message.RecipientType.TO,新的InternetAddress(useremail,“Admin”));
msg.setSubject(主题);
msg.setText(msgBody);
MimeBodyPart messageBodyPart=新的MimeBodyPart();
setContent(htmlBody,“text/html”);
Multipart Multipart=新的mimemmultipart(“相关”);
multipart.addBodyPart(messageBodyPart);
if(mapInlineImages!=null&&mapInlineImages.size()>0){
设置setImageID=mapInlineImages.keySet();
for(字符串contentId:setImageID){
MimeBodyPart imagePart=新的MimeBodyPart();
setHeader(“内容ID”,即“”);
setDisposition(MimeBodyPart.INLINE);
字符串imageFilePath=mapInlineImages.get(contentId);
尝试{imagePart.attachFile(imageFilePath);
}catch(IOException ex){ex.printStackTrace();
}multipart.addBodyPart(imagePart);}
msg.setContent(多部分);
发送(msg);
}捕获(地址异常){}
捕获(消息例外){}
捕获(不支持的编码异常e){}
}
添加imagePart.addHeader(“内容类型”、“图像/jpeg”)代码>附件图标可能只是您查看电子邮件的电子邮件客户端的一个功能。尝试在不同的客户机中查看它这可能更像是一个关于此邮件客户机的问题。它可能检测到存在内容类型不是text/*的部件,并发出“有附件”的信号。为了不花费太多时间,它使用了一种简单的启发式方法,而不是完全解析和考虑所有选项。如果不知道确切的客户机,以及客户机在这个版本中应用的机制,我们很可能不可能对此提出一个铁的解决方案(很可能没有,你只能接受它)。在gmail和outlook中尝试了它。我也有同样的问题…看起来你做的是对的。查找另一封包含html和图像的邮件,并将该邮件的MIME结构与您正在创建的邮件进行比较。我的代码在Gmail上运行良好,但Outlook client出现问题,该图像以内联方式显示,但也以附件形式显示。在我的例子中添加“image/png”修复了这个问题,现在附件图标不显示。非常感谢你。
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) {}
}