반응형
58일 차 특이사항
1. api 사용하기
- 이메일 인증하기 (https://gwamssoju.tistory.com/108 코드를 참고하여 변형함)
- 이메일 인증이 필요한 이유 : 사용자의 신원 확인, 보안 강화, 스팸 및 무단 가입을 방지할 수 있다.
- 관리자 입장에서 필요한 기능이다.
이메일 인증하기 환경설정 (구글 SMTP)
1. 의존성 추가
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
2. 구글 SMTP 설정하기
1) 구글 Gmail 톱니바퀴 클릭
2) 전달 및 POP/IMAP에서 IMAP 사용 체크
3) 위 설정을 완료하면 인증 문자가 날아온다.
4) 2단계 인증에 들어가서 앱 비밀번호를 설정한다.
5) 위 과정으로 만들어진 아이디, 비밀번호를 사용할 것이다.
6) servlet-context.xml (application.properties) 설정하기
- 아이디는 STMP에 등록된 구글 이메일을 복사 붙여 넣기
- 설정한 앱 비밀번호 그대로 복사 붙여 넣기(띄어쓰기 그대로)
<!-- 이메일 인증 -->
<beans:bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<beans:property name="host" value="smtp.gmail.com" />
<beans:property name="port" value="465" />
<beans:property name="username" value="[구글 아이디]" />
<beans:property name="password" value="[비번]" />
<beans:property name="defaultEncoding" value="utf-8" />
<beans:property name="javaMailProperties">
<beans:props>
<beans:prop key="mail.transport.protocol">smtp</beans:prop>
<beans:prop key="mail.smtp.auth">true</beans:prop>
<beans:prop key="mail.smtp.port">587</beans:prop>
<beans:prop key="mail.debug">true</beans:prop>
<beans:prop key="mail.smtp.ssl.trust">smtp.gmail.com</beans:prop>
<beans:prop key="mail.smtp.ssl.protocols">TLSv1.2</beans:prop>
<beans:prop key="mail.smtp.ssl.enable">false</beans:prop>
<beans:prop key="mail.smtp.starttls.enable">true</beans:prop>
<beans:prop key="mail.smtp.socketFactory.class">
javax.net.ssl.SSLSocketFactory</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
7) 여기까지 하면 환경 설정은 끝. 코드를 작성해보자.
구글 이메일 인증하기 코드
코드는 컨트롤러, JSP, SERVICE로 구성된다.
1. SignUp.jsp
1) HTML
이메일 : <div id="mail_input" name="mail_input">
<input type="text" size="15" name="email1" id = "email1" value="" >@
<input type="text" size="15" name="email2" id = "email2" value="">
<select name="emailselect" id="emailselect" required>
<option value="">선택</option>
<option value="naver">naver.com</option>
<option value="gmail">gmail.com</option>
<option value="nate">nate.com</option>
<option value="daum">daum.net</option>
<option value="choice">직접입력</option>
</select>
<button type="button" id="sendBtn" name="sendBtn" onclick="sendNumber()">인증번호</button>
</div>
<div id="mail_number" name="mail_number" style="display: none">
<input type="text" name="number" id="number" placeholder="인증번호 입력">
<button type="button" name="confirmBtn" id="confirmBtn" onclick="confirmNumber()">이메일 인증</button>
</div>
<br>
<input type="text" id="Confirm" name="Confirm" style="display: none" value="">
2) SCRIPT
<script>
$(document).ready(function() {
$('#emailselect').on('change', function() {
var selectedOption = $(this).val();
if (selectedOption === 'naver') {
$('#email2').val('naver.com');
} else if (selectedOption === 'gmail') {
$('#email2').val('gmail.com');
} else if (selectedOption === 'nate') {
$('#email2').val('nate.com');
} else if (selectedOption === 'daum') {
$('#email2').val('daum.net');
} else {
$('#email2').val('');
}
});
});
function sendNumber() {
var email1 = $("#email1").val();
var email2 = $("#email2").val();
// 이메일 주소 생성
var email = email1 + "@" + email2;
if (email1 && email2) {
$("#mail_number").css("display", "block");
$.ajax({
url: "mailconfirm",
type: "post",
dataType: "json",
data: { "mail": email },
success: function(data) {
alert("인증번호 발송");
$("#Confirm").attr("value", data);
}
});
} else {
alert("이메일 주소를 모두 입력하세요.");
}
}
function confirmNumber(){
var number1 = $("#number").val();
var number2 = $("#Confirm").val();
if(number1 == number2){
alert("인증되었습니다.");
}else{
alert("번호가 다릅니다.");
}
}
</script>
2. EmailController.java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class EmailController {
private final MailService mailService;
public EmailController(MailService mailService) {
this.mailService = mailService;
}
@ResponseBody
@PostMapping("mailconfirm")
public String MailSend(String mail){
int number = mailService.sendMail(mail);
String num = "" + number; //""를 붙여주면 문자열로 변환됨
return num;
}
}
3. MailService.java
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class MailService {
private final JavaMailSender javaMailSender;
public MailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
private static final String senderEmail= "tmdgh4199@gmail.com";
private static int number;
public static void createNumber(){
number = (int)(Math.random() * (90000)) + 100000;// (int) Math.random() * (최댓값-최소값+1) + 최소값
}
public MimeMessage CreateMail(String mail){
createNumber();
MimeMessage message = javaMailSender.createMimeMessage();
try {
message.setFrom(senderEmail);
message.setRecipients(MimeMessage.RecipientType.TO, mail);
message.setSubject("이메일 인증");
String body = "";
body += "<h3>" + "요청하신 인증 번호입니다." + "</h3>";
body += "<h1>" + number + "</h1>";
body += "<h3>" + "감사합니다." + "</h3>";
message.setText(body,"UTF-8", "html");
} catch (MessagingException e) {
e.printStackTrace();
}
return message;
}
public int sendMail(String mail){
MimeMessage message = CreateMail(mail);
javaMailSender.send(message);
return number;
}
}
이메일 인증 오류
javax.mail.SendFailedException: No recipient addresses
이런 경우 없는 주소거나 입력이 잘못된 경우다. 인증번호 버튼을 누르면 유효성검사가 진행되도록 해주는 것이 좋다.
반응형
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 59일차] 회원가입 form 보내기(ORACLE 함수) (2) | 2023.10.31 |
---|---|
[국민취업지원제도 일경험프로그램 57일차] 결재시스템 대리결재 수정 (1) | 2023.10.27 |
[국민취업지원제도 일경험프로그램 56일차] 결재시스템 대리결재 완료 (1) | 2023.10.26 |
[국민취업지원제도 일경험프로그램 55일차] 결재시스템 대리결재 controller (0) | 2023.10.25 |
[국민취업지원제도 일경험프로그램 54일차] 결재시스템 과장 서브쿼리 조건문 (0) | 2023.10.24 |