为了账号安全,请及时绑定邮箱和手机立即绑定

如何将邮件中的 base64 图像附加到 JavaMail 和 MimeMessageHelper?

如何将邮件中的 base64 图像附加到 JavaMail 和 MimeMessageHelper?

慕的地6264312 2021-10-27 19:14:52
我正在尝试发送带有图像附件的 Mime 电子邮件,但我知道如何执行此操作。我尝试了在线解决方案,但没有奏效。我会得到编码的图像,需要解码并附在邮件中。这是我的代码public class SendEmail{public static void main( String[] args ) throws javax.mail.MessagingException, IOException{      String value= "Wyk+HjAxHTAyNzg3MDUdODQwHTAxOR0wMDAwMDAwMDAwMDAwMDAd" +            "RkRFQh0wMDAwMDAwHTA0MB0dMS8xHTUwLjVMQh1OHVcgMzR0aCBTdHJlZXQdQ" +            "XVzdGluHVRYHSAeMDYdMTBaR0QwMDQdMTFaUmVjaXBpZW50IENvbXBhbnkgTmFt" +            "ZR0xMlo5MDEyNjM3OTA2HTE0WioqVEVTVCBMQUJFTCAtIERPIE5PVCBTSElQKio" +            "dMjNaTh0yMlocWR0yMFogHDAdMjZaNjEzMxwdHgQ=";           JavaMailSender mailSender = getJavaMailSender();    MimeMessage mimeMessage = mailSender.createMimeMessage();    MimeMessageHelper helper;    Map<String,Object> map = new HashMap<>();    try{        helper = new MimeMessageHelper(mimeMessage, true, "utf-8");        String sendTo = "abc@gmail.com";        String htmlMsg = "<h1> hello </h1>";        mimeMessage.setContent(htmlMsg, "text/html");        // add attachment encode in base64        byte[] decodedImg  Base64.decodeBase64(value);        // dont know how to attache the decode img         helper.setTo(sendTo);        helper.setSubject("Subject");        mailSender.send(mimeMessage);    } catch (MessagingException e) {        e.printStackTrace();    }}
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

尝试:


helper.addAttachment("MyImageName.jpg", new ByteArrayResource(value.getBytes()));

但请阅读:从代码来看,您似乎已经对图像进行了编码。“值”似乎是 Base64 格式。你不应该处理它,因为它是为你完成的。


// you can attach a file directly to the helper

FileSystemResource file = new FileSystemResource(new File("image_file.jpg"));

helper.addAttachment("MyImageName.jpg", file);

如果附件不是磁盘上的文件,您可以使用:


helper.addAttachment("MyImageName.jpg", new ByteArrayResource(IOUtils.toByteArray(attachment)));

如果这是一个输入流或这个:


helper.addAttachment("MyImageName.jpg", new ByteArrayResource(value.getBytes()));


查看完整回答
反对 回复 2021-10-27
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

通过波纹管代码修改代码后,我的问题解决了。


value= value.replaceFirst("^data:image/[^;]*;base64,?", "");

byte[] bytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(value);

helper.addAttachment("MyImageName.jpg", new ByteArrayResource(bytes));


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 292 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信