富文本变附件的问题只有一个答案,就是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库踩出来的
网友评论