프로젝트/학습관리시스템(LMS)
메일 전송, 계정 활성화
허정주
2022. 11. 8. 18:04
회원 가입 후 계정활성화를 위한 Java Mail Sender와 Gmail을 사용하여 메일 보내기 기능을 만들 것이다.
- 인증 메일 계정 설정 후 yml에 mail관련 설정
mail:
host: smtp.gmail.com
port: 587
username: gkst0518@gmail.com
password: ziucoodauruavfpv
properties:
mail:
smtp:
starttls:
enable: true
- 메일을 보낼 MailComponents 작성
@RequiredArgsConstructor
@Component
public class MailComponents {
private final JavaMailSender javaMailSender;
public boolean sendMail(String mail, String subject, String text) {
boolean result = false;
MimeMessagePreparator msg = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
messageHelper.setTo(mail);
messageHelper.setSubject(subject);
messageHelper.setText(text, true); // html 사용 여부
}
};
try {
javaMailSender.send(msg);
result = true;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return result;
}
}
- Member 엔티티에 이메일 인증 여부와 인증 키 추가
- MemberServiceImpl에 회원 가입 후 확인 메일 보내기 부분 추가
// 회원 가입 후 확인 메일 보내기
String email = parameter.getUserId();
String subject = "fastlms 사이트 가입을 축하드립니다. ";
String texg = "<p>fastlms 사이트 가입을 축하드립니다.<p><p> 아래 링크를 클락하셔서 가입을 완료하세요 </p>"
+ "<div> <a href='http://localhost:8080/member/email-auth?id=" + uuid + "'>가입 완료</a></div>";
mailComponents.sendMail(email, subject, texg);
return true;
□ 계정 활성화, 승인
- MemberService에 메서드 추가
// uuid에 해당하는 계정 활성화
boolean emailAuth(String uuid);
- MemberServiceImpl에서 uuid에 해당하는 계정을 찾는 기능에 findbyId를 사용할 수 없으므로 MemberRepository에 jpa형태 메서드 구현 후 구현
- 이미 인증이 되었다면 false return -> 이것에 대한 오류메시지 생성해야함
Optional<Member> findByEmailAuthKey(String emailAuthKey);
@Override
public boolean emailAuth(String uuid) {
Optional<Member> optionalMember = memberRepository.findByEmailAuthKey(uuid);
if(!optionalMember.isPresent()) {
return false;
}
Member member = optionalMember.get();
member.setEmailAuthYn(true);
member.setEmailAuthDt(LocalDateTime.now());
memberRepository.save(member);
return true;
}
- MemberController에서 구현한 메소드를 사용하여 해당하는 템플릿 반환
@GetMapping("/member/email-auth")
public String emailAuth(Model model, HttpServletRequest request) {
String uuid = request.getParameter("id");
System.out.println(uuid);
boolean result = memberService.emailAuth(uuid);
model.addAttribute("result", result);
return "member/email_auth";
}