공부가 싫은 개발자
[Spring Boot] Gmail SMTP로 이메일 보내기 본문
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
이 상태에서 이메일 발송 누르면 어마하게 느리니 비동기 방식으로 바꾸기
'스프링' 카테고리의 다른 글
| [Spring Boot] MyBatis 설정하기 (0) | 2025.09.14 |
|---|---|
| [Spring boot JPA] @Query 수정, 삭제 (0) | 2023.03.15 |
| [Spring boot JPA] Fetch 전략과 orphanRemoval (0) | 2023.03.15 |
| [Spring boot JPA] 엔티티의 양방향 관계 (0) | 2023.02.19 |