프로젝트

SpringBoot로 그룹캘린더 만들기 시즌2 - 스프링부트 메일 발송 기능 구현 (Google SMTP)

duburani 2023. 7. 21. 17:10

단두린더 2차 개혁 중 배치 기능이 추가되면 좋겠어서 그 중 일부 메일 발송 기능을 구현해보았다.

엄청나게 간단해서 넘 놀랬지

 

메일은 구글의 SMTP를 사용했다. 제일 유명해서 ㅋㅋ

 

 

1. 구글 메일 설정으로 이동

다음과 같이 POP, IMAP를 모두 사용함으로 변경해준다.

 

 

 

 

 

2. 구글 계정관리로 이동

보안 탭에 들어가서 2단계 인증을 해줘야 한다!

 

 

 

이걸 설정해줘야 이런 보안 수준 낮은 어쩌고~ 와 같은 보안에 바들 떨며 불안할 일이 없다

우리 구글 계정을 사용해서 메일을 발송할 것이기 때문에 2단계 인증 설정 필수~

 

 

앱 비밀번호를 따와야 함

 

 

메일과 Windows 컴퓨터로 설정하고 생성한 뒤 오른쪽의 앱 비밀번호를 따로 메모해둡시당

 

 

 

 

3. build.gradle 설정

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-mail'
}

 

 

4. application.yml 설정

spring: 
  mail:
    host: smtp.gmail.com
    port: 587
    username: ${mail.username}
    password: ${mail.password}
    properties:
      mail:
        smtp:
          auth: true
          timeout: 5000
          starttls:
            enable: true

이거 이대로 복사해서 붙여넣기 하면 된다.

username과 password는 야물파일에 설정 안하고 환경변수로 따로 집어넣어줄 예정

원하면 저기에 적어도 되긴 함

 

 

5. Edit Configurations 설정

 

언제 바뀐건지 모르겠는데 한글로 바뀜 ㅋㅋㅋㅋ

그래서 암튼.. edit con~~ 들어가주세요

 

 

요로코롬 추가

mail.username={아이디};mail.password={비밀번호}

 

{아이디}

이건 만약에 본인 구글 이메일이 admin@gmail.com 이다 치면 admin이 아이디

{비밀번호}

아까 위에서 기억하라고 했던 앱 비밀번호

 

환경변수에 이렇게 설정해주면 야물에 ${mail.username}, ${mail.password}가 설정됩니다.

이름 바꾸고 싶으면 원하는 대로 작명해주세요

 

 

 

 

 

6. EmailController

@Controller
@RequiredArgsConstructor
public class EmailController {
    private final EmailService emailService;

    @PostMapping("/mail")
    @ResponseBody
    public String sendMail(@RequestBody EmailPostDto emailPostDto){
        emailService.sendSimpleMessage(emailPostDto);
        return new Gson().toJson("success");
    }
}

7. EmailService

@Service
@RequiredArgsConstructor
public class EmailService {
    private final JavaMailSender javaMailSender;

    public void sendSimpleMessage(EmailPostDto mailDto) {
        Mail mail = Mail.builder()
                .to(mailDto.getEmail())
                .subject("test title")
                .message("test contents")
                .build();

        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("");
        message.setTo(mail.getTo());
        message.setSubject(mail.getSubject());
        message.setText(mail.getMessage());

        javaMailSender.send(message);
    }
}

 

그냥 기본적인 메일 구현 기능만 적었다

나머지 뭐 entity dto .. 속에 내용은 알아서 하고~ 일단 간단하게 메일 보내는 방법만 터득!

 

이후에 발전 시킵시다