관리 메뉴

공부가 싫은 개발자

[Spring Boot] Gmail SMTP로 이메일 보내기 본문

스프링

[Spring Boot] Gmail SMTP로 이메일 보내기

우엉엉 2025. 12. 18. 19:52

1. Gmail SMTP 
  - 사용할 구글 계정 2차 인증 필수
  - 앱 비밀번호 > 비밀번호 발급

2. build.gradle 설정
   이메일 의존성 추가

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

 

3. application.yml

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: 사용할 Gmail 계정
    password: 앱 비밀버호 16자리 
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

 

4. MailSender 인터페이스 작성

  - 현재는 Gmail SMTP로 개발 예정이고, 나중에 OAuth2로 바꿀 예정이라 인터페이스로 구현
  - 이런 게 아니라면 바로 Class로 구현해도 좋음

public interface MailSender {

    void sendInvitationMail(String toEmail, String invitationLink);
}

 

5. GmailSender 클래스 작성

  - 대충 이런식으로 작성해 주면 됨
  - 개발중인 프로젝트에 맞에 알아서 바꾸기

@Slf4j
@Service
@RequiredArgsConstructor
public class GmailMailSender implements MailSender {

    private final JavaMailSender mailSender;

    @Override
    public void sendInvitationMail(String toEmail, String invitationLink) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(toEmail);
        message.setSubject("✈️ 여행 초대가 도착했어요!");
        message.setText("""
            안녕하세요!

            여행 초대가 도착했습니다.
            아래 링크를 클릭해 참여해 주세요.

            %s

            ※ 링크는 일정 시간이 지나면 만료됩니다.
            """.formatted(invitationLink));

        mailSender.send(message);
    }
}

 

6. 필요한 곳에 갖다 붙여넣기

  - 아래처럼 원하는 곳에서 함수 불러오면 됨

private final MailSender mailSender;


try {
	mailSender.sendInvitationMail(email, invitationLink);
    log.info("✅ 이메일로 초대장 전송 성공: email={}", email);
} catch (Exception e) {
    // 메일 실패는 도메인 실패 아님
   	log.warn("메일 발송 실패: {}", email, e);
}

 

7. TODO

이 상태에서 이메일 발송 누르면 어마하게 느리니 비동기 방식으로 바꾸기