프로젝트/학습관리시스템(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";
	}