팀프로젝트/SpringBoot

스프링 부트 팀플) 20240310_이메일 시스템 구축

일일일코_장민기 2024. 3. 10. 08:43
728x90

 

자고 일어나자 마자 암호화/복호화 시스템 한번 보고 이메일 시스템 구축에 들어갔다.

 

분명 어제랑 같은 코드인데, 암호값이 바뀌지 않는다.

 

암호화 자체는 잘 되지만, 어제랑 달리 암호가 어째서인지 바뀌진 않는다.
안 되는 건 아니지만, 뭔가 짜게 식은 느낌.
아무튼 메일 시스템 구축에 들어갔다.

 

 

https://kimvampa.tistory.com/93

 

[Spring]메일서버(SMTP Server)를 이용한 메일 전송 2

개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다. 목표 1. 스프링에서 SMTP 서버를 이용한 메일 전송을 할 수 있습니다. 2. 1의 목표 기능을 구현하기 위해 구글, 네

kimvampa.tistory.com

https://wiki.yowu.dev/ko/Knowledge-base/Spring-Boot/Learning/033-implementing-email-sending-in-a-spring-boot-application

 

033: Spring Boot 애플리케이션에서 이메일 전송 구현

 

wiki.yowu.dev

https://velog.io/@gale4739/Spring-Boot-%EB%A9%94%EC%9D%BC-%EB%B0%9C%EC%86%A1

 

Spring Boot 메일 발송

안녕하세요 오늘은 Spring Boot에서 메일을 발송하는 방법에 대해서 포스팅하도록 하겠습니다. 현재 투다에는 메일로 비밀번호 찾기 기능을 제공하고 있는데, 이 부분을 Spring Boot에서 어떤 식으로

velog.io

https://ajdahrdl.tistory.com/236

 

[Spring Boot] 이메일 전송하는 방법

안녕하세요. 이번 포스팅에서는 Spring Boot에서 간단한 이메일을 보내는 방법에 대해 공유해드리려고 합니다. 총 두 가지 챕터(이메일 계정 설정, Spring Boot 설정)이 있습니다. 1. Spring Boot에서 보내

ajdahrdl.tistory.com

 

참고 사이트들

 

스프링 때 메일 시스템에 더해 파일까지 업로드할 수 있는 시스템을 만들고자 했다.

일단 현재로서는 정해진 파일만 넣지만,
관리자 페이지 팀원이랑 상의해서 관리자가 파일을 넣을 수 있게 만들고 싶다.

 

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

 

우선 디펜더시 입력

# Mail Setting
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=
spring.mail.password=
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true

 

application.properties에도 입력

 

package com.moonBam.controller.member;

import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import java.io.File;														//강제 입력

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Test {

    @Autowired
    private JavaMailSender javaMailSender;
    private static final String FROM_EMAIL = "cjstkrhdfk666@gmail.com";

    //단순 메일 전송
    @RequestMapping("/test")
    public String sendTestEmail() throws Exception {
        	String TO_EMAIL = "";
        	String EMAIL_SUBJECT = "메일 제목";
        	String EMAIL_BODY = "메일 내용";
            sendEmail(FROM_EMAIL, TO_EMAIL, EMAIL_SUBJECT, EMAIL_BODY);
        return "member/Login/loginMain";
    }
    
    //파일 첨부 메일 전송
    @RequestMapping("/test2")
    public String sendTestEmail2() throws Exception {
        	String TO_EMAIL = "";
        	String EMAIL_SUBJECT = "Email subject";
        	String EMAIL_BODY = "Email body";
        	sendEmailWithFiles(FROM_EMAIL, TO_EMAIL, EMAIL_SUBJECT, EMAIL_BODY);
        return "member/Login/loginMain";
    }
    
    //이메일 전송 함수(수정 X)(람다식)
    private void sendEmail(String from, String to, String subject, String body) throws Exception {
        javaMailSender.send(
        	(MimeMessagePreparator) mimeMessage -> {
	        	MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);				// true: 멀티파트 메세지를 사용
	            messageHelper.setFrom(from);
	            messageHelper.setTo(to);
	            messageHelper.setSubject(subject);
	            messageHelper.setText(body, true);														// true: html을 사용
        });
    }

    //이메일 전송 함수(수정 X)(일반식)
//    private void sendEmail(String from, String to, String subject, String body) throws Exception {
//	    javaMailSender.send(new MimeMessagePreparator() {
//
//	    	@Override
//	        public void prepare(MimeMessage mimeMessage) throws Exception {
//	            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);	    		// true: 멀티파트 메세지를 사용
//	            messageHelper.setFrom(from);
//	            messageHelper.setTo(to);
//	            messageHelper.setSubject(subject);
//	            messageHelper.setText(body, true);														// true: html을 사용
//	        }
//		});
//	}
    
    //이메일과 파일 전송 함수(수정 X)(일반식)
    private void sendEmailWithFiles(String from, String to, String subject, String body) throws Exception {
    	javaMailSender.send(new MimeMessagePreparator() {

	    	@Override
	        public void prepare(MimeMessage mimeMessage) throws Exception {
	    		MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
	            messageHelper.setFrom(from);
	            messageHelper.setTo(to);
	            messageHelper.setSubject(subject);
	            messageHelper.setText(body, true);
	        	FileSystemResource file = new FileSystemResource(new File("c:\\a.png")); 
	        	messageHelper.addAttachment("c:\\a.png", file);
	        }
		});
	}  
    
    
    
}

열받게 코드 붙여넣기만 하면 정렬이 박살이 난다.

 

 

 

그냥 이메일 전송에는 Vue 배우면서 알게 된 람다식,
파일 첨부 이메일 전송에는 기존 방식대로 코드를 작성했다.

코드의 기본 틀은 아래쪽으로 밀어넣고, 수정하는 부분만 위로 올렸다.
현재 내 실력으로 만들 수 있는 휠키를 덜 돌리는 코드다.
import java.io.File;는 왜 자동으로 안 돌아가는지 모르겠다.

파일 전송 함수에는 관리자가 넣고 싶은 파일을 넣되, 디폴트 파일을 설정해볼 예정이다.

 

두 방식 다 잘 보내진다.

 

 

다음에는 랜덤 6자리 정수를 인증코드로 보내고, 그걸 인증하는 시스템을 구현할 예정이다.

이걸 해야 가입이 되고, 가입이 되야 암호화/복호화가 원할하게 확인할 수 있다.

(이미 만든거 주석 처리하기에는 너무 많아서 어?쩔 수 없다.)