[Spring] 프로젝트 / 비밀번호 찾기 & 네이버 이메일 발송

    목차
● Mac
● Java21
● Spring 3.2.2
● 이클립스
● Oracle SQL

 

로그인 회원가입 이미 구현되어있는 상태에 비밀번호 찾기 기능을 추가 하게 되었습니다.

회원가입할때 만든 이메일, name를 입력해서 2개다 일치하는지 확인합니다

두 정보가 이미 등록되어있고 일치한다면 메일로 임시비밀번호를 발송합니다

 

 

UserService
	// userEmail check
	public boolean userEmailCheck (String userEmail, String userName){
		SiteUser user = userRepository.findByEmail(userEmail);
		return user != null && user.getUsername().equalsIgnoreCase(userName);
		}

 

 

MailDTO.java
private String address;
	private String title;
	private String message;
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	} 
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getMessage() {
		return message; 
	}
	public void setMessage(String message) {
		this.message = message;
	}

 

 

 

SendEmailService.java
private final JavaMailSender mailSender;
private final PasswordEncoder passwordEncoder;
private static final String FROM_ADDRESS = "보내는 이메일";




public MailDTO createMailAndChargePassword(String userEmail, String userName){
        String str = getTempPassword();
        MailDTO dto = new MailDTO();
        dto.setAddress(userEmail);
        dto.setTitle("임시비밀번호 안내 이메일 입니다.");
        dto.setMessage("안녕하세요. 임시 비밀번호 안내 관련 이메일 입니다.\n"
                + "회원님의 임시 비밀번호는 [ " + str + " ] 입니다.\n"
                + "로그인 후에 비밀번호를 변경을 해주세요.");
        updatePassword(str, userEmail);
        return dto;
    } 
    
        // 임시 비밀번호 업데이트
    public void updatePassword (String str, String userEmail){
        String pw = passwordEncoder.encode(str);
        Long id = userRepository.findByEmail(userEmail).getId();
        userRepository.updatePw(pw,id);
    }
    
        // 임시 비밀번호 생성
    public String getTempPassword(){
        char[] charset = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
        'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        String str = "";

        int idx = 0; 
        for(int i=0; i<10; i++){
            idx = (int) (charset.length * Math.random());
            str += charset[idx];
        }
        return str;
    }

    // 메일 보내기
    public void mailSend (MailDTO mailDTO){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(mailDTO.getAddress());
        message.setSubject(SendEmailService.FROM_ADDRESS);
        message.setText(mailDTO.getMessage());
        message.setFrom("보내는 이메일");
        message.setReplyTo("보내는 이메일");
        mailSender.send(message);
    }

 

 

 

Controller.java
 // Email + name 일치하는지
 	@GetMapping("/check/findPw")
 	public @ResponseBody Map<String,Boolean> pwFind (@RequestParam("userEmail") String userEmail, @RequestParam("userName") String userName) {
 		Map<String, Boolean> json = new HashMap<>();
 		boolean pwFindCheck = userService.userEmailCheck(userEmail, userName);
 		json.put("check", pwFindCheck);
 		return json;
 	}

 	// 등록된 이메일로 발송 + 비밀번호 임시 변경
 	@PostMapping("/check/findPw/sendEmail")
 	public @ResponseBody void sendEmail(String userEmail, String userName){
 		MailDTO dto = ms.createMailAndChargePassword(userEmail, userName);
 		ms.mailSend(dto);
 	}

 

 

 

 

#mail
spring.mail.host=smtp.naver.com
spring.mail.port=465
spring.mail.username= (보내는 이메일)
spring.mail.password= (비밀번호)
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.enable=true

 

 

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.