Web/Spring

[Spring/스프링] Spring boot email 보내기

poopooreum 2024. 10. 7. 11:46
반응형

안녕하세요!

오늘은 Spring boot에서 원하는 email로 data를 보내는 방법에 대해서 포스팅을 해보겠습니다.
email로 data를 보내기 위해서는 spring boot에서 코드만 짜는 것이 아닌 발신 이메일에 대한 설정을 해야 하는데요,
이 두 가지 모두 적어보겠습니다!
그리고 포스팅하기에 앞서 제가 올릴 코드들의 간단한 로직을 설명드리자면, front에서 requestBody안에 서비스 유형, 이름, 회사명, 전화번호, 이메일 주소, 문의 내용을 보내면 back에서 InquiryAddDTO로 내용을 받아온 뒤, 데이터를 가공해서 이 내용들을 보내고자 하는 이메일 주소로 보내줍니다.

 

✏️ 이메일 설정하기

  1. 먼저 자신의 구글 계정에 들어간 뒤 구글 계정 관리를 클릭합니다.
  2. 보안 버튼을 클릭한 뒤 앱 비밀번호 생성을 클릭합니다.
  3. 여기서 만들어진 비밀번호를 복사해서 메모장 같은 곳에 저장합니다.
  4. 주의할 점으로는 앱 비밀번호를 만들기 위해서는 구글 계정이 2차 인증이 설정이 되어 있어야 합니다.

 

이렇게 나온 비밀번호를 저장하면 계정 설정은 완료입니다!


✏️  build.gradle 설정 추가

// email
	implementation 'org.springframework.boot:spring-boot-starter-mail'

✏️ application.yml 설정 추가

spring :
  mail:
    host:
      smtp.gmail.com
    port:
      587
    username: 구글 계정 이름(@gmail.com은 안쓰셔도 됩니다.)
    password: 위에서 만든 앱 비밀번호
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

 

✏️ InquiryController 생성

public class InquiryController {

    private final InquiryService inquiryService;

    @PostMapping("/add")
    public ResponseEntity<ResponseDTO<Object>> addInquiry(@Valid @RequestBody InquiryAddDTO inquiryAddDTO) {
        inquiryService.sendInquiryByMail(inquiryAddDTO.getService(),inquiryAddDTO.getName(),inquiryAddDTO.getCompany(),inquiryAddDTO.getTel(),inquiryAddDTO.getEmail(),inquiryAddDTO.getQuestion());
        return new ResponseEntity<>(ResponseDTO.builder().error(false).message("문의사항 등록을 완료하였습니다.").data(null).build(), HttpStatus.OK);
    }
}

✏️ InquiryService 생성

public interface InquiryService {

    void sendInquiryByMail(String service, String name, String company, String tel, String email, String question);
}

✏️ InquiryServiceImpl 생성(이 코드가 이메일을 보내는 핵심 로직)

public class InquiryServiceImpl implements InquiryService {
    private final JavaMailSender javaMailSender;
    private static final String emailAddress = "";

    @Override
    public void sendInquiryByMail(String service, String name, String company, String tel, String email, String question) {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setTo(emailAddress);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mailMessage.setSubject("문의 내용 " + dateFormat.format(new Date()));
        String emailResponse = "";
        emailResponse +="서비스 희망 항목 :"+service+"\n성명 : "+name +"\n회사 : "+company+"\n연락처 : "+tel + "\n이메일 : "+email + "\n문의 내용 : "+question;
        mailMessage.setText(emailResponse);
        javaMailSender.send(mailMessage);
    }
}

✏️ InquiryAddDTO 생성

public class InquiryAddDTO {

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String service;

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String name;

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String company;

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String tel;

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String email;

    @NotNull
    @Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
    private String question;
}

반응형