程序员

JavaMail富文本图片变附件的问题

2020-04-26  本文已影响0人  会转圈儿的冷冷凉
富文本变附件的问题只有一个答案,就是html中的src标签的值没有找到对应的inline的附件,inline附件所在的层级结构不影响邮箱服务器解析,也就是说MimeMutiPart的alternative层级下可以不包含inline附件的bodyPart,inline的bodyPart可以放到最外层的MimeMutiPart("mix")下

举例:
html格式如下:

<html>
  <header>
</header>
<body>
<div>
  <img src="cid:lenglengliang"/img>
</div>
</body>
</html>
这里的src值一定要在前面追加"cid:" 这是rfc标准
  MimeBodyPart mimeBodyPart = new MimeBodyPart();
  ByteArrayDataSource byteArrayDataSource = new ByteArrayDataSource(multipartFile.getInputStream(),multipartFile.getContentType());
  byteArrayDataSource.setName(multipartFile.getOriginalFilename());
  DataHandler dataHandler = new DataHandler(byteArrayDataSource);
  mimeBodyPart.setContentID("<lenglengliang>");
  mimeBodyPart.setFileName(MimeUtility.encodeText(multipartFile.getOriginalFilename()));
  mimeBodyPart.setDataHandler(dataHandler);
  mimeBodyPart.setDisposition(MimeBodyPart.INLINE);
  totalMimePart.addBodyPart(mimeBodyPart);
这里的ContentID一定不要加"cid"字样,但是需要把“lenglengliang”用"<>"包裹起来

mimeBodyPart.setContentID("<lenglengliang>");
这是标准写法 不追加尖括号其实关系不是很大,如果不加尖括号可能导致客户端邮箱用标准解析库解析失败
byteArrayDataSource也需要设置文件名 不然也有可能客户端解析失败

byteArrayDataSource.setName(multipartFile.getOriginalFilename());

我遇到的坑都是 安卓的k9库踩出来的

当初我富文本的inline变成附件的原因就是在setConetentID时 我取的是一个全局变量 全局变量中包含了cid: 最后是前端的哥们对比eml邮件源码帮我比对出来的 特此记录一下
上一篇下一篇

猜你喜欢

热点阅读