#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);
}