JavaMail添加附件Mime身体为base64

问题描述:

我使用JavaMail API来发送电子邮件,但是当我用附件发送电子邮件时我只想发送附件base64视图。这里是我实现的代码,它工作正常,但有时附件不转换为base64。JavaMail添加附件Mime身体为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文件?预先感谢您

JavaMail根据正文部分的实际内容选择Content-Transfer-Encoding。如果内容主要是文本,则不会使用base64。

如果有某种原因,迫使其选择的base64,您可以强制传输编码的选择(例如,该消息将被破程序,总是期待的附件进行base64编码处理):

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

非常感谢你@Bill Shannon,我在尝试addHeader并且它没有工作。 – nAkhmedov