MimeMessageHelper - добавить вложение из base64 string [duplicate]

Java 6 имеет API компилятора. Ознакомьтесь с классом компилятора Java Javadoc

http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

и пример

http://www.javabeat.net/2007/04/the-java-6-0-compiler-api/

3
задан Victor Stafusa 19 April 2017 в 14:09
поделиться

2 ответа

Поскольку изображение не находится в отдельной части тела, PreencodedMimeBodyPart не поможет вам.

Как вы кодируете изображение base64?

Альтернативой является использование multipart / related message, с изображением в отдельной части, с ссылкой на URL-адрес cid:

1
ответ дан Bill Shannon 17 August 2018 в 09:32
поделиться

Хорошо, ребята, я нашел ответы, я не знаю, правильно ли я работаю.

Здесь мой код:

private static final Pattern imgRegExp  = Pattern.compile( "<img[^>]+src\\s*=\\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();
}

Спасибо за помощь меня улучшить, если нужно улучшить:)

6
ответ дан mbagiella 17 August 2018 в 09:32
поделиться
  • 1
    Использование pmp.setContent( pairs.getValue(), 'image/png' ); лучше, чем pmp.setText( pairs.getValue() );. – Jensen Ching 4 April 2014 в 07:20
Другие вопросы по тегам:

Похожие вопросы: