我尝试使用Javamail作为附件发送图像,而不会在文件系统中保存实际图像。相反,我有一个Base64编码的字符串。
.sh
我能够收到一封电子邮件,但是当我这样做时,无法打开附件。
此外,当我使用public void sendMultiPartMailWithAttachments(final String[] recipient, final String from,
@Nullable final String replyTo, @Nullable final String replyToName, final String subject,
final String plainText, final String html, String image)
throws MessagingException, AddressException, UnsupportedEncodingException {
Message msg = this.setupMessage(recipient, from, replyTo, replyToName, subject);
// Create the text part
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(plainText, "utf-8");
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");
byte[] bytes = Base64.getMimeDecoder().decode(image);
MimeBodyPart imagePart = new MimeBodyPart();
// imagePart.setDataHandler(new DataHandler(imageObject, "image/jpeg"));
imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(bytes, MediaType.JPEG.toString())));
imagePart.setFileName("proof_test.jpg");
Multipart multiPart = new MimeMultipart("alternative");
multiPart.addBodyPart(textPart);
multiPart.addBodyPart(htmlPart);
multiPart.addBodyPart(imagePart);
msg.setContent(multiPart);
msg.saveChanges();
Transport.send(msg);
}
时,它显示getContentType()
而不是text/plain
。
答案 0 :(得分:0)
除非图像完全是文本部分中的图像,否则您不希望它成为同一部分/替代品的一部分。相反,你想要一个外部的multipart / mixed,其中第一部分是multipart / alternative,第二部分是image / jpeg。
如果图像字符串已经是base64编码的,那么在将其添加到multipart / mixed时,您将要使用PreencodedMimeBodyPart。但看起来你首先要解码它,这将允许JavaMail重新编码它。这也应该有效,但效率较低。
如果您修复了所有这些并且仍然没有为图像获取正确的内容类型,请使用Message.writeTo将图像写入FileOutputStream,然后在此处发布输出。