[Spring Boot] 스프링 메일 전송 방법 ( + google Gmail SMTP 설정)

2024. 3. 28. 16:40· Spring Boot
목차
  1. 1. 구글 Gmail SMTP 사용 위한 설정
  2. 2. build.gradle
  3. 3. application.yml
  4. 4. MailService
  5. 5. MailController
  6. 6. 실행 결과
  • 다양한 사이트에서 쉽게 볼 수 있는 회원가입 시 이메일 검증
  • 스프링 부트로 사용자에게 메일 전송 기능 구현

 

1. 구글 Gmail SMTP 사용 위한 설정

 

  • 구글 사이트 > 프로필 클릭 > Google 계정 관리

 

  • 검색창에 > "앱 비밀번호" 검색

 

  • 앱 이름 설정 > 만들기

 

  • 16자리의 앱 비밀번호가 생성됨

 

2. build.gradle

dependencies {

    // 메일 전송 위한 라이브러리 추가
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    
    // 예제에서 확인을 위한 타임리프 추가 (필요하지 않다면 넣지 않아도 됨)
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}

 

3. application.yml

spring:
  mail:
    host: smtp.gmail.com        # SMTP 서버 호스트
    port: 587                   # SMTP 서버 포트
    username:                   # SMTP 서버 로그인 아이디
    password:                   # SMTP 서버 로그인 비밀번호
    properties:
      mail:
        smtp:
          auth: true            # 사용자 인증 시도 여부
          starttls:
            enable: true        # starttls 활성화 여부
  • username : SMTP 설정을 완료한 gmail 아이디 (@gmail.com 은 제외하고 아이디만 기입)
  • password : SMTP 설정 시 발급 받은 16자리의 비밀번호 (띄어쓰기 없이 기입)

 

4. MailService

  • 메일 보내는 방식이 2가지 존재
    • 1. SimpleMailMessage 를 통한 간단한 텍스트 전송 방법
    • 2. MimeMessage 를 통한 html 반영 메일 전송 방법
  • 2가지 방식의 서비스 단 메서드 예제를 구현함
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

@Service
@Slf4j
@RequiredArgsConstructor
public class MailService {

    private final JavaMailSender javaMailSender;

    public void sendSimpleMailMessage() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();

        try {
            // 메일을 받을 수신자 설정
            simpleMailMessage.setTo("chm2006@naver.com");
            // 메일의 제목 설정
            simpleMailMessage.setSubject("테스트 메일 제목");
            // 메일의 내용 설정
            simpleMailMessage.setText("테스트 메일 내용");

            javaMailSender.send(simpleMailMessage);

            log.info("메일 발송 성공!");
        } catch (Exception e) {
            log.info("메일 발송 실패!");
            throw new RuntimeException(e);
        }

    }

    public void sendMimeMessage() {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();

        try{
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");

            // 메일을 받을 수신자 설정
            mimeMessageHelper.setTo("chm2006@naver.com");
            // 메일의 제목 설정
            mimeMessageHelper.setSubject("html 적용 테스트 메일 제목");

            // html 문법 적용한 메일의 내용
            String content = """
                    <!DOCTYPE html>
                    <html xmlns:th="http://www.thymeleaf.org">
                                        
                    <body>
                    <div style="margin:100px;">
                        <h1> 테스트 메일 </h1>
                        <br>
                                        
                                        
                        <div align="center" style="border:1px solid black;">
                            <h3> 테스트 메일 내용 </h3>
                        </div>
                        <br/>
                    </div>
                                        
                    </body>
                    </html>
                    """;
            
            // 메일의 내용 설정
            mimeMessageHelper.setText(content, true);

            javaMailSender.send(mimeMessage);

            log.info("메일 발송 성공!");
        } catch (Exception e) {
            log.info("메일 발송 실패!");
            throw new RuntimeException(e);
        }
    }

}

 

  • 메일을 받을 수신자가 여러명인 경우 (setTo 부분 수정)
// 문자열 배열 형태
String[] receivers = {"abcd@gmail.com", "efgh@gmail.com"};
simpleMailMessage.setTo(receivers);

// ArrayList의 경우 => 배열로 전환해줘야 함!
ArrayList<String> receiverList = new ArrayList<>(Arrays.asList("abcd@gmail.com", "efgh@gmail.com"));
      
String[] changeReceivers = receiverList.toArray(new String[receiverList.size()]);
simpleMailMessage.setTo(changeReceivers);

 

 

5. MailController

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class MailController {

    private final MailService mailService;

    @GetMapping("/simple")
    public void sendSimpleMailMessage() {
        mailService.sendSimpleMailMessage();
    }

    @GetMapping("/html")
    public void sendMimeMessage() {
        mailService.sendMimeMessage();
    }
}

 

 

6. 실행 결과

  • @RestController 로 인해서 postman 으로 GET request를 전송하여 실행 결과 확인

 

  • http://localhost:8080/simple (GET) 전송 시

 

  • http://localhost:8080/html (GET) 전송 시

저작자표시 변경금지 (새창열림)

'Spring Boot' 카테고리의 다른 글

[Spring Boot] 로그인 기능 구현 (9) - 자동 로그인 구현 (Spring Security - Remember Me)  (0) 2024.05.05
[Spring Boot] Whitelabel Error Page 대신 원하는 에러 페이지 적용  (0) 2024.04.04
[Spring Boot] 스프링 부트 엑셀 파일 업로드 예제( + 엑셀 파일 열기로 업로드 확인 )  (0) 2024.03.28
[Spring Boot] 스프링 부트 엑셀 파일에 데이터 쓰기  (0) 2024.03.27
[AWS] EC2 서버 시간 설정 (TimeZone 변경)  (0) 2024.03.26
  1. 1. 구글 Gmail SMTP 사용 위한 설정
  2. 2. build.gradle
  3. 3. application.yml
  4. 4. MailService
  5. 5. MailController
  6. 6. 실행 결과
'Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 로그인 기능 구현 (9) - 자동 로그인 구현 (Spring Security - Remember Me)
  • [Spring Boot] Whitelabel Error Page 대신 원하는 에러 페이지 적용
  • [Spring Boot] 스프링 부트 엑셀 파일 업로드 예제( + 엑셀 파일 열기로 업로드 확인 )
  • [Spring Boot] 스프링 부트 엑셀 파일에 데이터 쓰기
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[Spring Boot] 스프링 메일 전송 방법 ( + google Gmail SMTP 설정)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.