Как отправить электронное письмо с веб-страницы в виде вложения с помощью Spring Boot, JavaScript, Ajax?

#javascript #ajax #spring-boot #pdf #mime-message

Вопрос:

Я реализовал функцию для создания счета-фактуры в формате PDF. Таким образом, в основном есть две кнопки: одна для печати, а другая для электронной почты. Поэтому, когда пользователь нажимает на кнопку электронной почты, счет должен быть отправлен на определенный адрес электронной почты.

Дело в том, что я немного смущен реализацией. Так что, если у кого-нибудь есть какие-либо предложения, было бы заметно.

Снимок экрана для отображения счета по электронной почте

Снимок экрана для отображения сгенерированного PDF-файла

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

1. Этот же PDF-файл, который вы показываете пользователю в браузере, должен был быть сгенерирован на предыдущем шаге? Когда они нажмут кнопку «Электронная почта», отправьте электронное письмо (с помощью Java-почты) или (spring-boot-mail) и прикрепите тот же файл PDF.

2. Да, когда пользователь нажимает на кнопку «Печать», затем в новом окне открывается PDF-файл счета, а затем можно распечатать или просто сохранить этот PDF-файл на своих локальных компьютерах. Итак, мой вопрос в том, нужно ли мне делать то же самое для кнопки электронной почты, чтобы отправить сгенерированный PDF-файл по электронной почте?

3. Кнопка электронной почты должна быть реализована в вашем бэкэнде. Когда пользователь нажимает «Электронная почта», он вызовет /отправит метод электронной почты, который затем (Сгенерирует PDF, создаст электронное письмо, отправит электронное письмо)

4. У вас есть какой-нибудь пример или ссылка на учебник или что-то еще, чтобы я мог получить некоторое представление об этом?

5. Поможет ли вам приведенный ниже пример ответа @Rakhi

Ответ №1:

 @Controller
@RequestMapping("/mail")
public class MailController {

    @Autowired
    public EmailService emailService;


    @RequestMapping(value = {"/send"}, method = RequestMethod.POST)
    public String sendEmailWithAttachment(Model model,
                             HttpServletRequest request) {

             //Logic to create PDF file

            emailService.sendMessageWithAttachment(to,subject,body, pdfFile);

    }
 

 public interface EmailService{

      sendMessageWithAttachment(
          String to, String subject, String text, String pathToAttachment, FileSystemResource pdfFileToSend); 

}
 

 @Component
public class EmailServiceImpl implements EmailService {

  @Autowired
  private JavaMailSender emailSender;

  @Override
  public void sendMessageWithAttachment(
  String to, String subject, String text, String pathToAttachment, FileSystemResource pdfFileToSend) {
    // ...
    
    MimeMessage message = emailSender.createMimeMessage();
     
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    
    helper.setFrom("noreply@baeldung.com");
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(text);
    
    helper.addAttachment("PDFFile", pdfFileToSend);

    emailSender.send(message);
    // ...
}
 

Затем ваш Javascript вызывает эту конечную точку /mail/send, которая должна сгенерировать PDF-файл для этого пользователя, создать электронное письмо и отправить электронное письмо с помощью spring-boot-mail-starter

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
 

Рекомендации:

https://howtodoinjava.com/spring-boot2/send-email-with-attachment/#5

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

1. Я скоро сообщу вам об этом. Спасибо.