SpringBoot + 메일(+첨부파일)API

손성우·2022년 8월 22일

스프링부트

목록 보기
4/4

Google SMTP를 이용해 여러개의 첨부파일을 포함한 메일 보내기를 구현하고자 한다.

구글 계정에 대한 설정은 아래 참고사이트에서 참고하길 바란다.

구글 SMTP를

개발환경
Springboot + JPA + gradle

  1. build.gradle
implementation 'org.springframework.boot:spring-boot-starter-mail:2.3.11.RELEASE'
  1. Dto
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Setter
public class MailDto {

    private String position;
    private String name;
    private String phone;
    private String email;
    private List<MultipartFile> multipartFile;

}

컨트롤러에서 @ModelAttribute로 받아야 하기 때문에 Setter가 필요하다. List multipartFile를 제외한 나머지 부분은 원하는 request에 따라 자유롭게 하면 된다.

  1. Controller
@PostMapping("/mail")
    public ResponseDto<?> execMail(@ModelAttribute MailDto mailDto) {
        return mailService.sendMail(mailDto);
    }
  1. MailService
@RequiredArgsConstructor
@Service
public class MailService {

    private final JavaMailSender javaMailSender;

    public ResponseDto<?> sendMail(MailDto mailDto) {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8"); // use multipart (true)

            mimeMessageHelper.setSubject("subject");
            mimeMessageHelper.setFrom(mailDto.getEmail());
            mimeMessageHelper.setTo("tjddnths0223@naver.com");
            mimeMessageHelper.setText("text");
            if(!CollectionUtils.isEmpty(mailDto.getMultipartFile())) {
                for(MultipartFile multipartFile: mailDto.getMultipartFile()) {
                    mimeMessageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
                }
            }

            javaMailSender.send(mimeMessage);
            return ResponseDto.success();

        } catch (Exception e) {
            e.printStackTrace();
            return ResponseDto.fail("FAIL EMAIL", "이메일 전송 실패");
        }

    }
}

참고
https://earth-95.tistory.com/134
https://born2bedeveloper.tistory.com/68

profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글