🧑🏻‍💻 비밀번호 재설정을 위한 이메일 보내기 구현 1

 

본격적인 구현에 앞서 STMP가 무엇인지 어떻게 작동하는 것인지 알기 위해 테스트를 해봤다. 

 

💡STMP(Simple Mail Transfer Protocol)란?

➡️ 인터넷에서 이메일을 전송하는 데 사용되는 표준 프로토콜이다.
    이 프로토콜은 서로 다른 이메일 시스템 간의 메세지 전달 및 중계를 가능하게 하며 TCP/IP를 기반으로 동작한다. 
➡️ 전자 우편 서버 간의 통신을 위한 핵심 프로토콜이라고 할 수 있다.

 

✔️ 테스트

  • 시작에 앞서 기본적으로 해줘야 할 의존성 추가 (나는 gradle을 사용하기 때문에 아래와 같이 추가했다.)
implementation 'org.springframework.boot:spring-boot-starter-mail'

 

⭐️ 나는 네이버 SMTP 서버를 사용했는데 그전에 반드시 잊지 말고 해야할 설정은 아래와 같다.(더보기 클릭)
      ※ 발신자로 지정한 계정에 설정해야 함

 

더보기

* [내 메일함 관리] - POP3/IMAP 설정 클릭 - POP3/SMTP 설정 클릭 해서 아래와 같이 설정하고 저장

 

* yml에 설정해줄 포트 번호나 서버 정보도 그 아래에서 확인할 수 있다. 

 

 

  • STMP를 통해 메일을 발신할 때 발신자 메일이 필요하기 때문에  application.yml에 발신자 정보를 추가한다. 
    ※ 이메일을 발송하기 위해서는 메일 서버가 필요한데 직접 구축할 수도 있고 구글이나 네이버 등에서 제공하는 SMTP 서버를 이용할 수도 있다. 나는 후자를 택했고 그중 네이버를 이용했다. 
spring:
  mail:
    host: smtp.naver.com # SMTP 서버 호스트
    port: 465 # SMTP 서버 포트
    username: # SMTP 서버 로그인 아이디 (발신자)
    password: # SMTP 서버 로그인 패스워드 (앱 비밀번호)
    properties:
      mail:
        smtp:
          auth: true # 사용자 인증 시도 여부 (기본값 : false)
          ssl:
            enable: true
          starttls:
            enable: true # StartTLS 활성화 여부 (기본값 : false)

 

 

 

  • 이메일 내용 구성을 구성하고 전달하기 위한 틀 만들기 
@Data
@Builder
public class EmailMessage {

	private String to;

	private String subject;

	private String message;
}

 

 

  • 메일을 보내기 위한 로직 구현 
@Service
@RequiredArgsConstructor
public class EmailService {

	private final JavaMailSender javaMailSender;
    
    @Value("${spring.mail.username}")
	private String from;

	public void sendMail(EmailMessage emailMessage) {
		MimeMessage mimeMessage = javaMailSender.createMimeMessage(); // MimeMessage 객체 생성
		try {
        	// MimeMessageHelper를 사용하여 보다 쉽게 MimeMessage를 구성할 수 있다.
		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
			
                // 이메일 수신자 설정
                mimeMessageHelper.setTo(emailMessage.getTo());
            
                // 이메일 제목 설정
                mimeMessageHelper.setSubject(emailMessage.getSubject()); 
            
                // 본문 내용 설정, false는 HTML 형식의 메세지를 사용하지 않음을 나타낸다.
                mimeMessageHelper.setText(emailMessage.getMessage(), false);
                
                // 이메일 발신자 설정
                mimeMessageHelper.setFrom(new InternetAddress(from + "@naver.com"));
            
                // 이메일 보내기 
                javaMailSender.send(mimeMessage);
            
		} catch (MessagingException e) {
			throw  new RuntimeException(e);
		}
	}
}
  • Spring Framework에서는  JavaMailSender라는 인터페이스를 제공하여 이메일 보내는 작업을 쉽게 할 수 있도록 도와준다. 
    제일 처음에 추가한 'spring-boot-starter-mail' 을 추가한 이유도 이 인터페이스를 사용하기 위해서다.
  • MimeMessage 는 JavaMail API에서 제공하는 클래스로 멀티파트 MIME 형식의 이메일 메세지를 생성하는 데 사용된다. 
    : MIME 형식을 사용하면 텍스트, HTML, 이미지, 첨부 파일 등 다양한 유형의 콘텐츠를 포함하는 복잡한 이메일 메세지를 작성할 수 있다. 

 

 

  • 컨트롤러 구현
@RestController
@RequiredArgsConstructor
@RequestMapping("/test")
public class EmailController {

	private final EmailService emailService;

	@PostMapping("/send-email")
	public ResponseEntity sendEmail() {
		EmailMessage emailMessage = EmailMessage.builder()
			.to("수신아이디@naver.com")
			.subject("테스트메일")
			.message("비밀번호 재설정을 위한 이메일입니다.")
			.build();
		emailService.sendMail(emailMessage);

		return new ResponseEntity(HttpStatus.OK);
	}
}

 

 

  • 결과 

  • 포스트맨으로 200도 잘 떴고, 수신받는 이메일로 들어가 확인해보니 테스트 메일이 잘 들어와 있는 것을 확인할 수 있었다. 

BELATED ARTICLES

more