들어가기 앞서 사용 기술에 대해 알아보자
SMTP는 무엇인가?
※ SMTP(Simple Mail Transfer Protocol)
인터넷 상 이메일을 전송하기 위해 사용되는 통신규약

쉽게 음..약간 서버같은 느낌이다
여튼 SMTP로 환경을 구축해줘야된다 그 이유는? 아래 코드에 보면
1. SMTP 설정하기
**SMTP 환경설정부분**
<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>
"smtp.gmail.com" : gmail(=google)은 SMTP를 제공해준단다 그래서 쓴다.
그리고!!
<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>
요 녀석들이 핵심인 것 같다. 서버설정 부분이라고 보면 되니 그대로...복..부...ㅌ;;
**mvnrepository.com에서 JavaMail 라이브러리 다운**
**pom.xml**
<!-- 메일인증 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
말이 다운이지 저거 pom.xml에 복붙하면 끝.
이 아니고
메이븐 빌드를 꼭 해줘야 적용된다. 휴..
이제 직접사용한 코드를 보자(※스압주의)
2. JavaMail 사용하기
MailController.java
package kr.or.ddit.web;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import kr.or.ddit.service.customer.MailService;
@Controller
public class MailController {
@Autowired
private MailService mailService;
public void setMailService(MailService mailService) {
this.mailService = mailService;
}
@ResponseBody
@RequestMapping(value = "/checkEmailAjax.do")
public Map<String, String> sendMail(@RequestBody Map<String, String> map, HttpSession session) {
System.out.println("/checkEmail.do에 들어옴");
System.out.println("입력받은 email의 값 : " + map.get("email"));
int random = new Random().nextInt(100000) + 10000; // 10000 ~ 99999
System.out.println("random의 값 : " + random);
String joinCode = String.valueOf(random);
System.out.println("joinCode의 값 : " + joinCode);
session.setAttribute("joinCode", joinCode);
String subject = "회원가입 인증 코드 입니다.";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("안녕하세요. '빨래통'입니다.\r귀하의 인증 코드는 <" + joinCode + "> 입니다.");
System.out.println(stringBuilder.toString());
boolean finishSend = this.mailService.send(subject, stringBuilder.toString(), "TongAdmin", map.get("email"));
System.out.println("성공이냐 실패냐 : " + finishSend);
map.put("joinCode", joinCode);
System.out.println(map);
return map;
}
}
MailService.java
package kr.or.ddit.service.customer;
public interface MailService {
/** 메일 전송
* @param subject 제목
* @param text 내용
* @param from 보내는 메일 주소
* @param to 받는 메일 주소 **/
public boolean send(String subject, String text, String from, String to);
}
MailServiceImpl.java
package kr.or.ddit.service.customer.impl;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import kr.or.ddit.service.customer.MailService;
@Service("mailService")
public class MailServiceImpl implements MailService {
// org.springframework.mail.javamail.JavaMailSender
@Autowired
JavaMailSender javaMailSender;
public void setJavaMailSender(JavaMailSender javaMailSender) {
System.out.println("들어오냐");
this.javaMailSender = javaMailSender;
}
@Override
public boolean send(String subject, String text, String from, String to) {
System.out.println("send에 들어옴");
// javax.mail.internet.MimeMessage
MimeMessage message = javaMailSender.createMimeMessage();
System.out.println("message의 값 : " + message);
try {
// org.springframework.mail.javamail.MimeMessageHelper
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
helper.setSubject(subject);
helper.setText(text, true);
helper.setFrom(from);
helper.setTo(to);
javaMailSender.send(message);
return true;
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
}
Script
function fn_sendEmail_Ajax() {
var userEmail = $("#email").val().trim();
// var inputCode = $("#inputCode").val().trim();
// 메일이 입력 안되면 튕기기
if (userEmail == "" || userEmail == null) {
flag_dupl_mail = false;
alert("이메일 주소를 입력해야 합니다.");
return;
}
if(flag_dupl_use_mail == false){
flag_dupl_mail = false;
$("#resultMailBox").html("이미 가입된 이메일 입니다").css('color', 'red');
return;
}
var form = {
email : userEmail
// joinCode : inputCode
}
$.ajax({
url : "/checkEmailAjax.do",
data : JSON.stringify(form),
dataType : "JSON",
type : "post",
contentType : "application/json; charset=utf-8;",
async : false,
success : function(data) {
alert("입력하신 이메일 주소에서 발급된 코드를 확인하세요.");
resultCode = data.joinCode;
$("#checkCodeDiv").show();
},
error : function() {
alert("네트워크가 불안정합니다. 다시 시도해 주세요.222");
}
})
}
signIn.jsp
<div class="count-box">
<p>
<strong id ="resultMailBox">Email</strong>
</p>
<i class="bi bi-at"></i>
<span class="userEmail">
<input style="width: 60%; display: inline;" placeholder="이메일을 입력하세요" class="form-control" type="text" id="email" name="email" oninput="fn_emailChk_Ajax()"/>
<button type="button" class="btn btn-outline-primary" id="showDiv" onclick = "fn_sendEmail_Ajax()">
<i class="fa fa-search"></i>이메일 인증
</button>
<div style="display: none;" id="checkCodeDiv">
<input type="text" id="inputCode" style="width: 60%; display: inline;" placeholder="인증코드 입력" class="form-control" />
<button type="button" class="btn btn-outline-primary" onclick="fn_checkCode()">확인</button>
</div>
<h6 style="color: green;">※ 이메일을 입력해주세요</h6>
</span>
</div>
'Language > JAVA' 카테고리의 다른 글
com.fasterxml.jackson.core.JsonParseException (0) | 2022.06.30 |
---|---|
JAVA에서 문자열을 ArrayList로 변환 및 ArrayList와 List의 차이점 (0) | 2022.04.11 |
ResultHandler(RowHandler)사용법 (0) | 2022.03.15 |
log4j2 사용법 / 환경설정 / 패턴 layout / system.out 차이점 (0) | 2021.12.29 |
상속(Inheritance) (0) | 2021.06.15 |