富文本變附件的問(wèn)題只有一個(gè)答案姐帚,就是html中的src標(biāo)簽的值沒(méi)有找到對(duì)應(yīng)的inline的附件,inline附件所在的層級(jí)結(jié)構(gòu)不影響郵箱服務(wù)器解析,也就是說(shuō)MimeMutiPart的alternative層級(jí)下可以不包含inline附件的bodyPart惫皱,inline的bodyPart可以放到最外層的MimeMutiPart("mix")下
舉例:
html格式如下:
<html>
<header>
</header>
<body>
<div>
<img src="cid:lenglengliang"/img>
</div>
</body>
</html>
這里的src值一定要在前面追加"cid:" 這是rfc標(biāo)準(zhǔn)
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"字樣,但是需要把“l(fā)englengliang”用"<>"包裹起來(lái)
mimeBodyPart.setContentID("<lenglengliang>");
這是標(biāo)準(zhǔn)寫法 不追加尖括號(hào)其實(shí)關(guān)系不是很大旅敷,如果不加尖括號(hào)可能導(dǎo)致客戶端郵箱用標(biāo)準(zhǔn)解析庫(kù)解析失敗
byteArrayDataSource也需要設(shè)置文件名 不然也有可能客戶端解析失敗
byteArrayDataSource.setName(multipartFile.getOriginalFilename());
我遇到的坑都是 安卓的k9庫(kù)踩出來(lái)的