使用Javamail将图像作为附件发送

时间:2016-10-20 14:15:50

标签: java javamail attachment

我尝试使用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

1 个答案:

答案 0 :(得分:0)

除非图像完全是文本部分中的图像,否则您不希望它成为同一部分/替代品的一部分。相反,你想要一个外部的multipart / mixed,其中第一部分是multipart / alternative,第二部分是image / jpeg。

如果图像字符串已经是base64编码的,那么在将其添加到multipart / mixed时,您将要使用PreencodedMimeBodyPart。但看起来你首先要解码它,这将允许JavaMail重新编码它。这也应该有效,但效率较低。

如果您修复了所有这些并且仍然没有为图像获取正确的内容类型,请使用Message.writeTo将图像写入FileOutputStream,然后在此处发布输出。