이메일 인증하기를 구현해봤다.
그냥 이메일 보내는 기능까지만 다른 블로그 참고하여 구현했다.
EmailConfig
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
@Configuration
@PropertySource("classpath:application.properties")
public class EmailConfig {
@Value("${mail.smtp.port}")
private int port;
@Value("${mail.smtp.socketFactory.port}")
private int socketPort;
@Value("${mail.smtp.auth}")
private boolean auth;
@Value("${mail.smtp.starttls.enable}")
private boolean starttls;
@Value("${mail.smtp.starttls.required}")
private boolean startlls_required;
@Value("${mail.smtp.socketFactory.fallback}")
private boolean fallback;
@Value("${AdminMail.id}")
private String id;
@Value("${AdminMail.password}")
private String password;
@Bean
public JavaMailSender javaMailService() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.naver.com");
javaMailSender.setUsername(id);
javaMailSender.setPassword(password);
javaMailSender.setPort(port);
javaMailSender.setJavaMailProperties(getMailProperties());
javaMailSender.setDefaultEncoding("UTF-8");
return javaMailSender;
}
private Properties getMailProperties() {
Properties pt = new Properties();
pt.put("mail.smtp.socketFactory.port", socketPort);
pt.put("mail.smtp.auth", auth);
pt.put("mail.smtp.starttls.enable", starttls);
pt.put("mail.smtp.starttls.required", startlls_required);
pt.put("mail.smtp.socketFactory.fallback", fallback);
pt.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
return pt;
}
}
EmailController
import com.sparta.spring_projectclone.service.EmailService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class EmailController {
private final EmailService emailService;
@PostMapping("/emailConfirm")
@ApiOperation(value = "회원 가입시 이메인 인증", notes = "기존사용하고 있는 이메일을 통해 인증")
@ApiResponses({
@ApiResponse(code = 200, message = "성공"),
@ApiResponse(code = 401, message = "인증 실패"),
@ApiResponse(code = 404, message = "사용자 없음"),
@ApiResponse(code = 500, message = "서버 오류")
})
public ResponseEntity<String> emailConfirm(
@RequestBody @ApiParam(value="이메일정보 정보", required = true) String email) throws Exception {
String confirm = emailService.sendSimpleMessage(email);
return ResponseEntity.status(200).body(confirm);
}
}
EmailServiceImpl
import lombok.RequiredArgsConstructor;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Random;
@Service
@RequiredArgsConstructor
public class EmailServiceImpl implements EmailService{
private final JavaMailSender emailSender;
public static final String ePw = createKey();
private MimeMessage createMessage(String to)throws Exception{
System.out.println("보내는 대상 : "+ to);
System.out.println("인증 번호 : "+ePw);
MimeMessage message = emailSender.createMimeMessage();
message.addRecipients(MimeMessage.RecipientType.TO, to);//보내는 대상
message.setSubject("이메일 인증");//제목
String msgg="";
msgg+= "<div style='margin:100px;'>";
msgg+= "<h1> 안녕하세요 writer입니다. </h1>";
msgg+= "<br>";
msgg+= "<p>아래 코드를 회원가입 창으로 돌아가 입력해주세요<p>";
msgg+= "<br>";
msgg+= "<p>감사합니다!<p>";
msgg+= "<br>";
msgg+= "<div align='center' style='border:1px solid black; font-family:verdana';>";
msgg+= "<h3 style='color:blue;'>회원가입 인증 코드입니다.</h3>";
msgg+= "<div style='font-size:130%'>";
msgg+= "CODE : <strong>";
msgg+= ePw+"</strong><div><br/> ";
msgg+= "</div>";
message.setText(msgg, "utf-8", "html");//내용
message.setFrom(new InternetAddress("자신의 이메일","writer"));//보내는 사람
return message;
}
public static String createKey() {
StringBuffer key = new StringBuffer();
Random rnd = new Random();
for (int i = 0; i < 8; i++) { // 인증코드 8자리
int index = rnd.nextInt(3); // 0~2 까지 랜덤
switch (index) {
case 0:
key.append((char) ((int) (rnd.nextInt(26)) + 97));
// a~z (ex. 1+97=98 => (char)98 = 'b')
break;
case 1:
key.append((char) ((int) (rnd.nextInt(26)) + 65));
// A~Z
break;
case 2:
key.append((rnd.nextInt(10)));
// 0~9
break;
}
}
return key.toString();
}
@Override
public String sendSimpleMessage(String to)throws Exception {
// TODO Auto-generated method stub
MimeMessage message = createMessage(to);
try{//예외처리
emailSender.send(message);
}catch(MailException es){
es.printStackTrace();
throw new IllegalArgumentException();
}
return ePw;
}
}
EmailService
public interface EmailService {
String sendSimpleMessage(String to) throws Exception;
}
application.properties
mail.smtp.auth=true
mail.smtp.starttls.required=true
mail.smtp.starttls.enable=true
mail.smtp.socketFactory.fallback=false
mail.smtp.port=465
mail.smtp.socketFactory.port=465
#admin 네이버 계정
AdminMail.id =
AdminMail.password =
처음엔 gmail을 smtp설정을 하려 했으나, 현재 아얘 못하도록 막아놓은 것 같아서 네이버로 진행했다.
네이버 메일의 환경설정에서 이렇게 설정해주면 끝!
참고 : https://javaju.tistory.com/100
[Spring Boot] 이메일 인증 회원가입하기 구현
현재 진행하고 있는 프로젝트에서 사용하고 있는 이메일을 이용해 회원가입을 진행할 수 있도록 구현했습니다. 네이버, 구글, 다음 등의 가입되어있는 이메일을 이용하여 해당 이메일로 인증번
javaju.tistory.com
'TIL' 카테고리의 다른 글
항해99_WIL220626 (실전 프로젝트 시작) (0) | 2022.06.26 |
---|---|
항해99_TIL220622 (클론프로젝트 6일차) (0) | 2022.06.23 |
항해99_TIL220620 (클론프로젝트 4일차) (0) | 2022.06.21 |
항해99_TIL220617 (클론코딩 1주차) (0) | 2022.06.18 |
항해99_TIL220616 (미니프로젝트 마지막날) (0) | 2022.06.16 |