2016-11-15 9 views
1

Я использую JavaMail api для отправки электронной почты, но когда я отправляю электронное письмо со вложением, я хочу отправить вложения только base64. Вот я реализовал код, он отлично работает, но иногда вложение не конвертируется в base64.JavaMail Добавить прикрепление к Mime body как base64

private static Multipart createMultipartMixed(Email email, List<File> attachmentFiles, Context context) throws MessagingException { 
Multipart multipartMixed = new MimeMultipart("mixed"); 

MimeBodyPart multipartAlternativeBodyPart = new MimeBodyPart(); 
multipartAlternativeBodyPart.setContent(createMultipartAlternative(email, context)); 
multipartMixed.addBodyPart(multipartAlternativeBodyPart); 

for (File file : attachmentFiles) { 
    MimeBodyPart attachFilePart = createAttachmentBodyPart(file, true, null); 
    multipartMixed.addBodyPart(attachFilePart); 
} 

return multipartMixed; 
} 

private static MimeBodyPart createAttachmentBodyPart(File file, boolean isAttachmentDisposition, String cid) 
     throws MessagingException { 
MimeBodyPart attachFilePart = new MimeBodyPart(); 
FileDataSource fds = new FileDataSource(file.getAbsolutePath()); 
attachFilePart.setDataHandler(new DataHandler(fds)); 
try { 
    attachFilePart.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B")); 
    if(isAttachmentDisposition) { 
     attachFilePart.setDisposition(Part.ATTACHMENT); 

    } else { 
     attachFilePart.setDisposition(Part.INLINE); 
     attachFilePart.setContentID("<" + cid + ">"); 
    } 
} catch (UnsupportedEncodingException e) { 
    LOGGER.error("UnsupportedEncodingException: " + e.getMessage()); 
    e.printStackTrace(); 
    attachFilePart.setFileName(fds.getName()); 
} 
return attachFilePart; 

}

Почему иногда привязанность не в виде base64 в Mime файла? Заранее спасибо

ответ

2

JavaMail выбирает кодировку Content-Transfer-Encoding на основе фактического содержимого части тела. Если контент в основном текстовый, он не будет использовать base64.

Если есть какая-то причина, чтобы заставить его выбрать base64 (например, сообщение будет обработано прерывистой программой, которая всегда ожидает прикрепление быть в кодировке base64), вы можете заставить выбор кодировки передачи:

attachFilePart.setHeader("Content-Transfer-Encoding", "base64"); 
+0

Большое спасибо @Bill Shannon, я пытался addHeader, и это не работало. – nAkhmedov

 Смежные вопросы

  • Нет связанных вопросов^_^