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

我正在尝试使用嵌入式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( "]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>" ); public send(email) throws Exception{ Map inlineImage = new HashMap(); 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> it = inlineImage.entrySet().iterator(); while ( it.hasNext() ) { Entry 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(); } 

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

由于图像不在单独的身体部位,PreencodedMimeBodyPart将无法帮助您。

你如何base64编码图像?

另一种方法是使用多部分/相关消息,将图像放在单独的部分中,使用cid:URL引用。