加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用javamail将base64图像嵌入到电子邮件中

发布时间:2020-12-15 04:17:55 所属栏目:Java 来源:网络整理
导读:我正在尝试使用嵌入式base64图像从 javamail发送电子邮件(img alt =’image PNG’src =’data:image / png; base64,iVBORw0KGgoAAAANSUhEUgA … AElFTkSuQmCC’“) 它使用的是小图像,但是当图像较大时,图像不会显示在莲花笔记中. 这是代码的一部分 Transpor
我正在尝试使用嵌入式base64图像从 javamail发送电子邮件(img alt =’image PNG’src =’data:image / png; base64,iVBORw0KGgoAAAANSUhEUgA … AElFTkSuQmCC’“)

它使用的是小图像,但是当图像较大时,图像不会显示在莲花笔记中.

这是代码的一部分

Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage( mailSession );
message.setSubject( subject );
message.setFrom( new InternetAddress( me) );
message.setContent( bodyWithEmbeddedBase64Image,"text/html" );
transport.connect();
transport.sendMessage( message,message.getAllRecipients() );
transport.close();`

我想用PreencodedMimeBodyPart来测试它,但我不知道如何使用它
有谁可以帮助我吗 :) ?

解决方法

好吧,我找到了答案,我不知道我做得对,但是工作正常.

这是我的代码:

private static final Pattern imgRegExp  = Pattern.compile( "<img[^>]+srcs*=s*['"]([^'"]+)['"][^>]*>" );
public send(email) throws Exception{

   Map<String,String> inlineImage = new HashMap<String,String>();
   String body = email.getBody();
   final Matcher matcher = imgRegExp.matcher( body );
   int i = 0;
   while ( matcher.find() ) {
      String src = matcher.group();
      if ( body.indexOf( src ) != -1 ) {
         String srcToken = "src="";
         int x = src.indexOf( srcToken );
         int y = src.indexOf( """,x + srcToken.length() );
         String srcText = src.substring( x + srcToken.length(),y );
         String cid = "image" + i;
         String newSrc = src.replace( srcText,"cid:" + cid );
         inlineImage.put( cid,srcText.split( "," )[1] );
         body = body.replace( src,newSrc );
         i++;
      }
   }
   Transport transport = mailSession.getTransport();
   MimeMessage message = new MimeMessage( mailSession );
   message.setSubject( email.getObjet() );
   message.setSender( new InternetAddress( email.getSender() ) );
   message.setFrom( new InternetAddress( email.getFrom()) );
   BodyPart bp = new MimeBodyPart();
   bp.setContent( body,"text/html" );
   MimeMultipart mmp = new MimeMultipart();
   mmp.addBodyPart( bp );
   Iterator<Entry<String,String>> it = inlineImage.entrySet().iterator();
   while ( it.hasNext() ) {
      Entry<String,String> pairs = it.next();
      PreencodedMimeBodyPart pmp = new PreencodedMimeBodyPart( "base64" );
      pmp.setHeader( "Content-ID","<" + pairs.getKey() + ">" );
      pmp.setDisposition( MimeBodyPart.INLINE );
      pmp.setText( pairs.getValue() );
      mmp.addBodyPart( pmp );
   }
   message.setContent( mmp );
   message.addRecipient( Message.RecipientType.TO,new InternetAddress( email.getTo() ) );
   transport.connect();
   transport.sendMessage( message,message.getAllRecipients() );
   transport.close();
}

感谢帮助我改进,如果需要改进:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读