메일 API

검색을 통해 메일 stmp를 검색

먼저, pom.xml에 먼저 라이브러리를 먼저 넣어준다

		<!-- 스케줄링, 메일발송, 캐시 연동,Velocity 등 부가기능제공 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-context-support</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		
		<!-- 메일 관련라이브러리 -->
		<dependency>
		    <groupId>com.sun.mail</groupId>
		    <artifactId>javax.mail</artifactId>
		    <version>1.5.6</version>
		</dependency>

그리고 root-context.xml에도 삽입해주고 사용준비한다

	<!-- 메일기능 관련설정 -->
	<!-- https://myaccount.google.com/lesssecureapps 보안수준 낮추기설정 -->
	<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	  <property name="host" value="smtp.gmail.com" />
	  <property name="port" value="587" />
	  <property name="username" value="abc@gmail.com" />
	  <property name="password" value="1234" />
	  <property name="javaMailProperties">
	  <props>
	    <prop key="mail.smtp.auth">true</prop>
	    <prop key="mail.smtp.starttls.enable">true</prop>
	  </props>
	  </property>
	</bean>

위의 내용을 근거로 클래스 내용에 있는 JavaMailSenderImpl를 가져와서 사용한다

먼저, 받아야되는 정보를 EmailDTO를 통해 생성한다

package com.demo.dto;

import lombok.Data;

@Data
public class EmailDTO {
	
	private String senderName; // 발신자 이름
	private String senderMail; // 발신자 메일주소
	private String receiveMail; // 수신자 메일주소. 회원메일주소사용
	private String subject; // 제목
	private String message; // 본문

	public EmailDTO() {
		this.senderName = "DocMall";
		this.senderMail = "DocMall"; // GMail 전자우편 정보 SMTP메일서버 이용
		this.subject = "DocMall 회원가입 메일인증코드입니다.";
		this.message = "메일 인증을 위한 인증코드를 확인하시고, 회원가입시 인증코드 입력란에 입력하세요.";
	}
	
}

EmailController도 생성

인증코드 보내는 함수 작성

package com.demo.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.demo.dto.EmailDTO;
import com.demo.service.EmailService;

import lombok.extern.log4j.Log4j;

@Log4j
@RequestMapping("/email/*")
@RestController
public class EmailController {

	@Autowired
	private EmailService service;
	
	@GetMapping("/send") // EmailDTO dto = new EmailDTO(); 스프링에서 자동객체생성
	public ResponseEntity<String> send(EmailDTO dto, HttpSession session){
		
		ResponseEntity<String> entity = null;
		
		// 인증코드 생성. 6자리
		String authCode ="";
		for(int i=0; i<6; i++) {
			authCode += String.valueOf((int)(Math.random()*10)); //0~9범위의 값
		}
		
		session.setAttribute("authCode", authCode);
		
		log.info("인증코드 : " + authCode);
		
		
		// 메일보내기 기능
		try {
			service.sendMain(dto, authCode);
			entity = new ResponseEntity<String>("success", HttpStatus.OK);
		} catch (Exception ex) {
			ex.printStackTrace();
			entity = new ResponseEntity<String>("error", HttpStatus.BAD_REQUEST);
		}
		
		return entity;
	}	
}

EmailService와 EmailServiceImpl를 생성하고 DTO에서 정보를 받아와 라이브러리 클래스를 이용해 메일을 클라이언트에게 발송한다

package com.demo.service;

import com.demo.dto.EmailDTO;

public interface EmailService {

	void sendMain(EmailDTO dto, String authCode);
	
}
package com.demo.service;

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import com.demo.dto.EmailDTO;

@Service
public class EmailServiceImpl implements EmailService {

	// 라이브러리 클래스를 가져오는 과정
	@Autowired
	private JavaMailSender mailSender;
	
	@Override
	public void sendMain(EmailDTO dto, String authCode) {
		
		// 메일구성정보를 담당하는 객체(받는사람, 보내는사람, 전자우편주소, 본문내용)
		MimeMessage msg = mailSender.createMimeMessage();
		
		try {
			// 받는사람 메일주소. 회원이 입력한 메일주소
			msg.addRecipient(RecipientType.TO, new InternetAddress(dto.getReceiveMail()));
			
			// 보내는사람(메일, 이름)
			msg.addFrom(new InternetAddress[] {new InternetAddress(dto.getSenderMail(), dto.getSenderName())});
			
			// 메일제목
			msg.setSubject(dto.getSubject(), "utf-8");
			
			// 본문내용
			msg.setText(authCode, "utf-8");
			
			mailSender.send(msg); // g-mail 보안설정을 낮게 해야 한다
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
	}

}

그리고 join폼에 가서 이메일 입력하고 보내기를 클릭하면 작동되도록 ajax작업 실행

<script>
  $(document).ready(function(){

    // 메일 인증코드 요청
    $("#btnAuthcode").on("click", function(){

      $.ajax({
          url: '/email/send',
          type: 'get',
          dataType: 'text',
          data: {receiveMail : $("#mem_email").val()},
          success: function(result){
			        if(result = "success"){
                alert("메일이 발송되어, 인증코드를 확인바랍니다.");
              } else {
                alert("메일이 발송이 실패되어, 메일주소 확인 또는 관리자에게 문의 바랍니다.");
              }
          }
      });
    });
  });
</script>

이후 인증 확인 절차 추가 MemberController

	//인증확인작업
	@PostMapping("/confirmAuthCode")
	@ResponseBody
	public ResponseEntity<String> confirmAuthCode(String uAuthCode, HttpSession session){
		
		ResponseEntity<String> entity = null;
		
		String authCode = (String) session.getAttribute("authCode");
		
		if(uAuthCode.equals(authCode)) {
			entity = new ResponseEntity<String>("success", HttpStatus.OK);
		} else {
			entity = new ResponseEntity<String>("fail", HttpStatus.OK);
		}
		
		return entity;
	}

해당 주소로 연결되는 ajax를 join.jsp에 확인절차 등록

<script>

// 메일 인증확인
$("#btnConfirmAuthcode").on("click", function(){

  let authCode = $("#mem_authcode").val();

  $.ajax({
    url: '/member/confirmAuthCode',
    type: 'post',
    dataType: 'text',
    data: {uAuthCode: authCode},
    success: function(result){

      if(result == "success"){
          alert("인증번호 확인 완료");
          isAuthCode = true;
      }else if(result == "fail"){
          alert("인증번호가 틀렸습니다. \n 다시 진행해주세요.");
          isAuthCode = false;
      }
    }
  });
});
</script>

결론, 라이브러리 및 root-context에 가져올 api 작성하고

EmailContrelloer 생성해서 적힌 이메일을 보내는 작업을 하고

입력하는 값과 일치하는 값이 입력되어 있는지 확인학는 작업을 마지막에 ajax로 진행해준다

  1. EmailController에서는 GetMapping를 통해 인증코드 생성 및 메일보내기 기능을 진행하고
  1. MemberController에서 PostMapping를 통해 인증코드가 맞는지 작업을 진행한다

댓글남기기