본문 바로가기
Spring/SpringBoot

[SpringBoot] 이메일 발신하기

by J4J 2023. 1. 16.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 이메일 발신하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

구글 계정 2단계 인증하기

 

해당 글은 이메일을 발신할 때 구글 계정을 활용하여 상대방에게 메일을 전달하는 방법을 작성하려고 합니다.

 

구글 계정을 활용하지 않는 케이스에서는 다른 상황들이 존재할 수 있으니 참고 부탁드립니다.

 

 

 

먼저, 구글 계정으로 이메일을 발신할 때 구글 계정 2단계 인증을 통한 앱 비밀번호를 취득해야 합니다.

 

앱 비밀번호를 생성하지 않을 경우 올바르게 구현하더라도 동작이 정상적으로 수행되지 않을 수 있습니다.

 

다음 단계를 거쳐 구글 계정 2단계 인증을 통한 앱 비밀번호를 생성해 보겠습니다.

 

 

 

[ 1. 구글 계정 로그인 ]

 

구글 계정 로그인

 

 

 

[ 2. Google 계정 접속 ]

 

Google 계정 접속

 

 

 

[ 3. 2단계 인증하기 ]

 

좌측의 보안 메뉴를 선택한 뒤 2단계 인증을 클릭해 줍니다.

 

2단계 인증하기

 

 

 

그리고 모든 인증과정을 거치면 다음과 같은 최종 화면을 확인할 수 있고, 사용을 눌러주시면 됩니다.

 

2단계 인증 완료

 

 

반응형

 

 

[ 4. 앱 비밀번호 생성하기 ]

 

2단계 인증이 완료되었다면 다시 Google 계정의 보안 메뉴로 넘어가줍니다.

 

그러면 다음과 같이 이전에 보이지 않았던 앱 비밀번호를 설정하는 것이 나오는데, 앱 비밀번호를 클릭하여 비밀번호를 설정해 보도록 하겠습니다.

 

앱 비밀번호 생성하기

 

 

 

[ 5. 앱 비밀번호 생성하기 - 비밀번호 생성 앱 및 기기 선택 ]

 

비밀번호를 생성할 앱과 기기를 선택하는 화면이 나오면 다음과 같이 메일과 Windows 컴퓨터를 각각 선택해 줍니다.

 

선택이 완료되었으면 생성을 눌러줍니다.

 

앱 비밀번호 생성하기 - 비밀번호 생성 앱 및 기기 선택

 

 

 

[ 6. 앱 비밀번호 생성하기 - 비밀번호 확인 ]

 

비밀번호 생성이 정상적으로 되었다면 다음과 같이 앱 비밀번호가 보이는 화면을 확인할 수 있습니다.

 

해당 비밀번호는 스프링에서 활용하기 때문에 잘 기록해 둔 뒤 아래쪽에서 활용해 보도록 하겠습니다.

 

앱 비밀번호 생성하기 - 비밀번호 확인

 

 

 

이메일 발신 방법

 

[ 1. 의존성 추가 ]

 

<!-- 이메일-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

 

 

[ 2. properties 추가 ]

 

# 이메일 설정
spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: {위에서 앱 비밀번호를 생성한 이메일 주소}
    password: {위에서 생성한 앱 비밀번호}
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

 

 

 

[ 3. 이메일 발신 controller 추가 ]

 

package com.email.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmailController {

    @Autowired
    private JavaMailSender javaMailSender;

    @PostMapping("/send")
    public ResponseEntity<Object> send() {
        // 이메일 발신될 데이터 적재
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setTo("{수신자 이메일 주소}");
        simpleMailMessage.setSubject("스프링으로 보내는 이메일 타이틀!");
        simpleMailMessage.setText("스프링으로 보내는 이메일 내용! \n" +
                                  "이런식으로 메일 내용이 전달됩니다!! \n" +
                                  "모두 스프링으로 메일을 전달해보세요!!!");

        // 이메일 발신
        javaMailSender.send(simpleMailMessage);

        // 결과 반환
        return ResponseEntity.ok(true);
    }
}

 

 

728x90

 

 

테스트

 

위와 같이 설정을 모두 마쳤다면 api를 호출하여 이메일 발송처리를 해보겠습니다.

 

다음과 같이 포스트맨을 이용하여 /send에 해당되는 api를 호출하였고 정상적으로 처리되어 true라는 결과를 전달받았습니다.

 

이메일 발신 api 호출

 

 

 

먼저 메일을 발신하기 위해 등록했었던 계정으로 접속해서 보낸 편지함을 확인했더니 다음과 같이 보낸 편지함에 스프링에서 작성했던 내용이 저장되어 있습니다.

 

보낸편지함 목록

 

보낸편지 상세 내용

 

 

 

그리고 메일을 전달받는 이메일로 접속해서 확인했더니 다음과 같이 받은 메일함에 스프링에서 작성했던 내용이 담겨있는 것을 확인할 수 있습니다.

 

받은메일함 목록

 

받은메일 상세 내용

 

 

 

 

추가로 만약 api를 호출하였는데 다음과 같이 계정에 접근할 수 없다는 메시지가 나온다면 2단계 인증이 정상적으로 되지 않은 케이스이니  2단계 인증을 수행한 뒤 다시 호출해 주시면 됩니다.

 

2단계 미인증 에러

 

 

 

참조

 

[Spring Boot] EMail 보내기

 

 

 

 

 

 

이상으로 이메일 발신하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글