전자정부프레임워크에서 이메일 인증하기

egov

이번 프로젝트에 이메일 인증을 넣기위해 알아본 것이다

우선 메이븐에 dependency를 추가해주자


<!-- 메일 라이브러리 -->
		<dependency>
		    <groupId>javax.mail</groupId>
		    <artifactId>mail</artifactId>
		    <version>1.4.7</version>
		</dependency>
	

그다음 context-email.xml을 생성한후 다음과같이 빈을 등록한다.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">


 <!-- 메일 보내기 -->
	<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="본인 아이디" />
		<property name="password" value="본인 비밀번호" />


	<!-- email 요청시는 SMTP -->
		<property name="javaMailProperties">
			<props>
				<prop key="mail.transport.protocol">smtp</prop>
				<prop key="mail.smtp.auth">true</prop>
				<prop key="mail.smtp.starttls.enable">true</prop>
				<prop key="mail.debug">true</prop>
			</props>
		</property>
	</bean>

			
</beans>


그리고나서 메일을 보내기위한 핸들러 클래스파일을 만든다


import java.io.UnsupportedEncodingException;

import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class MailHandler {
	 	
		private JavaMailSender mailSender;
	    private MimeMessage message;
	    private MimeMessageHelper messageHelper;

	    public MailHandler(JavaMailSender mailSender) throws MessagingException {
	        this.mailSender = mailSender;
	        message = this.mailSender.createMimeMessage();
	        messageHelper = new MimeMessageHelper(message, true, "UTF-8");
	    }

	    public void setSubject(String subject) throws MessagingException {
	        messageHelper.setSubject(subject);
	    }
	    public void setText(String htmlContent) throws MessagingException {
	        messageHelper.setText(htmlContent, true);
	    }
	    public void setFrom(String email, String name) throws UnsupportedEncodingException, MessagingException {
	        messageHelper.setFrom(email, name);
	    }
	    public void setTo(String email) throws MessagingException {
	        messageHelper.setTo(email);
	    }
	    public void addInline(String contentId, DataSource dataSource) throws MessagingException {
	        messageHelper.addInline(contentId, dataSource);
	    }
	    public void send() {
	        mailSender.send(message);
	    }
}


메일을 보낼때 키값을 랜덤으로 얻어내기위해 다음과같은 계산클래스파일을 만든다


import java.util.Random;

public class TempKey {
		private boolean lowerCheck;
	    private int size;
	
	    public String getKey(int size, boolean lowerCheck) {
	        this.size = size;
	        this.lowerCheck = lowerCheck;
	        return init();
	    }
	
	    private String init() {
	        Random ran = new Random();
	        StringBuffer sb = new StringBuffer();
	        int num = 0;
	        do {
	            num = ran.nextInt(75)+48;
	            if((num>=48 && num<=57) || (num>=65 && num<=90) || (num>=97 && num<=122)) {
	                sb.append((char)num);
	            }else {
	                continue;
	            }
	        } while (sb.length() < size);
	        if(lowerCheck) {
	            return sb.toString().toLowerCase();
	        }
	        return sb.toString();
    }
}

인증방식이 많지만 나는 크게 신경쓰지 않고 AJAX를 이용하여 클라이언트단에서 validation 체크를 위해

컨트롤러에 다음과같이 작성해준다

@RequestMapping(value = "emailCheck.do", method=RequestMethod.POST)
	@ResponseBody
	public void mailSending(@RequestParam String email,HttpServletResponse res) {
	 	System.out.println(email);
		String setfrom = "본인 메일주소";       
	 	String key = new TempKey().getKey(50, false);
	 	
	    String tomail  = email;     // 받는 사람 이메일
	    String title = "꿈꾸는 책다방 서비스 이메일 인증입니다.";
	    String content = new StringBuffer().
	    		append("제공되는 키를 회원가입창에 입력해주세요 키값은 : ").
	    		append(key).
	    		append(" 입니다.").
	    		toString();
	    
	     

	    
	    try {
	    	
	     res.setContentType("UTF-8");
		      
		 PrintWriter writer = res.getWriter();
		      
		  writer.print(key);	
	      MimeMessage message = sender.createMimeMessage();
	      MimeMessageHelper messageHelper 
	                        = new MimeMessageHelper(message, true, "UTF-8");
	 
	      messageHelper.setFrom(setfrom,"꿈꾸는 책다방");  // 보내는사람 생략하거나 하면 정상작동을 안함 두번째 인자값은 보낼때의 이름이다.
	      messageHelper.setTo(tomail);     // 받는사람 이메일
	      messageHelper.setSubject(title); // 메일제목은 생략이 가능하다
	      messageHelper.setText(content);  // 메일 내용
	     
	      sender.send(message);
	      
	      
	    } catch(Exception e){
	      System.out.println(e);
	    }
	   
	  }
      

여기까지 작성하였다면 메일이 정상적으로 보내질것이다.

효준's profile image

효준

2018-01-17 19:03

다른글 보러가기

전자정부프레임워크에서 스프링 시큐리티 사용하기

이전 포스트

전자정부프레임워크에서 로그인 스프링세션 설정하기

다음 포스트