[SpringBoot] Google 이메일 인증

2023. 9. 12. 10:59·Web & Android/SpringBoot

의존성 추가

  • Gradle
implementation 'org.springframework.boot:spring-boot-starter-mail'
  • Maven
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

⇒ 만약 의존성을 추가했는데도 Service 코드 작성 후 에러가 생긴다면 JavaMail API jar을 추가해보기!

 

Google SMTP


Google SMTP 비밀번호 생성

  1. 구글 로그인 후 [계정 관리] - [보안] - [2단계 인증] 설정

2. [앱 비밀번호] - [메일] - [사용할 기기] 생성

 

3. 생성 버튼 클릭하면 비밀번호가 생성됨 → 복사하여 spring.mail.password 에 넣어주면 된다.

4. Gmail [설정] - [전달 및 POP/IMAP]

 

application.properties or application.yml

  • Google SMTP는 465 또는 587 포트 번호를 사용할 수 있다고 한다.
  • application.properties
spring.mail.host=smtp.gmail.com
spring.mail.port=465
spring.mail.username=[본인이 사용할 이메일]
spring.mail.password=[생성된 비밀번호]
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.starttls.enable=true
  • application.yml
    spring:
      mail:
        # Google smtp server 사용
        host: smtp.gmail.com
        port: 587
        username: xxxx #앱 비밀번호 발급받은 google 계정
        password: xxxx #발급받은 앱 비밀번호
        properties:
          mail:
            smtp:
              starttls:
                enable: true
              auth: true

 

Controller

private final EmailService emailService;

    @PostMapping("/emailConfirm")
    public String mailConfirm(@RequestBody JoinRequest joinRequest) {
        int num = emailService.sendEmail(joinRequest.getId());

        return "코드 발급" + num;
    }

 

Service

import lombok.RequiredArgsConstructor;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import jakarta.mail.internet.MimeMessage;

@Service
@RequiredArgsConstructor
public class EmailService {

    private final JavaMailSender javaMailSender;  // 의존성 주입을 통해 필요한 객체를 가져옴
    private static final String senderEmail= "이메일 입";
    private static int number;  // 랜덤 인증 코드

    // 랜덤 인증 코드 생성
    public static void createNumber() {
        number = (int)(Math.random() * (90000)) + 100000;// (int) Math.random() * (최댓값-최소값+1) + 최소값
    }

    // 메일 양식 작성
    public MimeMessage createMail(String mail){
        createNumber();  // 인증 코드 생성
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            message.setFrom(senderEmail);   // 보내는 이메일
            message.setRecipients(MimeMessage.RecipientType.TO, mail); // 보낼 이메일 설정
            message.setSubject("[WalkingMate] 회원가입을 위한 이메일 인증");  // 제목 설정
            String body = "";
            body += "<h1>" + "안녕하세요." + "</h1>";
            body += "<h1>" + "Walking Mate 입니다." + "</h1>";
            body += "<h3>" + "회원가입을 위한 요청하신 인증 번호입니다." + "</h3><br>";
            body += "<h2>" + "아래 코드를 회원가입 창으로 돌아가 입력해주세요." + "</h2>";

            body += "<div align='center' style='border:1px solid black; font-family:verdana;'>";
            body += "<h2>" + "회원가입 인증 코드입니다." + "</h2>";
            body += "<h1 style='color:blue'>" + number + "</h1>";
            body += "</div><br>";
            body += "<h3>" + "감사합니다." + "</h3>";
            message.setText(body,"UTF-8", "html");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return message;
    }

    // 실제 메일 전송
    public int sendEmail(String userId) {
        // 메일 전송에 필요한 정보 설정
        MimeMessage message = createMail(userId);
        // 실제 메일 전송
        javaMailSender.send(message);

        // 인증 코드 반환
        return number;
    }
}

 

Test

 

참고

https://gwamssoju.tistory.com/108

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

'Web & Android > SpringBoot' 카테고리의 다른 글

[SpringBoot] Bean  (0) 2023.10.13
[SpringBoot] 스케줄링  (1) 2023.10.13
[SpringBoot] Lombok  (1) 2023.08.18
[SpringBoot] HTTP form에서 put, delete 사용법  (0) 2023.08.17
[SpringBoot] Thymeleaf - 날짜 변환  (0) 2023.08.17
'Web & Android/SpringBoot' 카테고리의 다른 글
  • [SpringBoot] Bean
  • [SpringBoot] 스케줄링
  • [SpringBoot] Lombok
  • [SpringBoot] HTTP form에서 put, delete 사용법
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Java
    baekjoon
    데이터베이스
    플러터
    리눅스
    스프링부트
    spring
    Spring Security
    Oracle
    pcce 기출문제
    리눅스마스터 1급
    programmers
    프로그래머스
    postgresql
    CS
    백준
    Linux
    자바
    스프링
    backjoon
    시큐리티
    데이터
    Flutter
    CS지식
    리눅스마스터
    DB
    python
    스프링 부트 쇼핑몰 프로젝트 with JPA
    JPA
    springboot
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[SpringBoot] Google 이메일 인증
상단으로

티스토리툴바