메일 API
메일 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로 진행해준다
- EmailController에서는 GetMapping를 통해 인증코드 생성 및 메일보내기 기능을 진행하고
- MemberController에서 PostMapping를 통해 인증코드가 맞는지 작업을 진행한다
댓글남기기