Строка Spring boot Base64 в качестве почтового вложения

#java #spring-boot #jakarta-mail

#java #весенняя загрузка #джакарта-почта

Вопрос:

Я преобразовал файл PPTX в строку Base64, и теперь я хочу использовать эту строку в качестве вложения электронной почты.

раньше я использовал эту часть кода для отправки файла по локальному пути, и это работает нормально

    public void sendEmail(Mail email) throws MailException, MessagingException {

        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(email.getEmail());
        helper.setText(email.getMessage());

        FileSystemResource file  = new FileSystemResource(email.getPath());
        helper.addAttachment("testfile.pptx", file);

        helper.setSubject(email.getSubject());
        javaMailSender.send(message);
    }
  

что я должен изменить / добавить, чтобы отправить эту строку base64 в виде файла вложения? . спасибо

Комментарии:

1. Зачем вы ее закодировали? Не делайте этого, mail-api позаботится об этом, просто прикрепите исходный файл.

2. @M.Deinum я хочу отправить презентацию, не сохраняя ее на своем компьютере, я получил строку base64 со стороны клиента (Angular 8)

3. Зачем вам это хранить? Вы уже сохраняете ее, судя по тому, что вы используете FileSystemResource . Если вы не хотите ее сохранять, просто прочитайте inputstream (или byte[]), когда он является частью отправляемого вами объекта form.

4. @M.Deinum сначала спасибо за ваш комментарий, я не хочу сохранять презентацию на своем компьютере, я просто преобразовал файл PPTX в строку base64 со стороны клиента и отправил его в виде вложения электронной почты, и это работает, благодаря вашему комментарию я использовал byte[]

Ответ №1:

Я решил это

 public void sendEmail(Mail email) throws MailException, MessagingException {

    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setTo(email.getEmail());
    helper.setText(email.getMessage());
    byte[] doc = Base64.getDecoder().decode(email.getBase64());

    helper.addAttachment("doc.pptx", new ByteArrayResource(doc));

    helper.setSubject(email.getSubject());
    javaMailSender.send(message);
}