首页 > 解决方案 > 如何使用 Spring Boot、JavaScript、Ajax 将网页的电子邮件作为附件发送?

问题描述

我已经实现了以 PDF 格式生成发票的功能。所以基本上有两个按钮,一个用于打印,另一个用于电子邮件。因此,当用户单击电子邮件按钮时,应将发票发送到特定的电子邮件。

问题是我对实现有点困惑。因此,如果有人有任何建议,将不胜感激。

显示电子邮件发票的屏幕截图

显示生成的 PDF 的屏幕截图

标签: javascriptajaxspring-bootpdfmime-message

解决方案


@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


推荐阅读