美文网首页程序员
JavaMail富文本图片变附件的问题

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

作者: 会转圈儿的冷冷凉 | 来源:发表于2020-04-26 12:11 被阅读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邮件源码帮我比对出来的 特此记录一下

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/pvkwihtx.html