팀 프로젝트로 임시 비밀번호도 만들어봤어요 지금 시작할게요.
우선 구글 이메일로 도전해봤는데
먼저 앱키(16자리)가 필요해요
구글 오른쪽 위 아이콘 클릭 -> 보안 -> 2단계 인증 -> 앱 비밀번호 만들기
build.gradle에
implementation 'org.springframework.boot:spring-boot-starter-mail'
추가하기.
application.properties에
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username='내 이메일'
spring.mail.password='내 앱키'
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
JavaMailSender를 사용하기 위해 필요한 것들~!@
우선 dto들부터
@Data
public class UserMailDTO {
private String UName;
private String UMail;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MailDTO {
private String address;
private String title;
private String message;
}
@Transactional
@GetMapping("/auth/findPw/{UName}")
public ResponseEntity<String> findUPw(@ModelAttribute UserMailDTO dto, @PathVariable("UName") String UName,
Model model) {
String mail = dto.getUMail();
String name = dto.getUName();
MailDTO user = userService.checkMailAndName(mail, name);
if (user != null) {
userService.mailSend(user);
return ResponseEntity.ok("success");
} else {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("fail");
}
}
이메일이랑 이름을 통해 비교를 해봤어요
@Autowired
private JavaMailSender mailSender;
public MailDTO checkMailAndName(String mail, String name) {
String str = getTempPassword();
MailDTO dto = new MailDTO();
dto.setAddress(mail);
dto.setTitle("아이디자인 임시비밀번호 안내 이메일 입니다.");
dto.setMessage("안녕하세요. 아이디자인 임시비밀번호 안내 관련 이메일 입니다." + " 회원님의 임시 비밀번호는 "
+ str + " 입니다." + "로그인 후에 마이페이지에서 비밀번호 변경을 해주세요");
UserEntity user = userRepository.findByUMail(mail);
user.setUPw(passwordEncoder.encode(str));
userRepository.save(user);
return dto;
}
//랜덤함수로 임시비밀번호 구문 만들기
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 = "";
// 문자 배열 길이의 값을 랜덤으로 10개를 뽑아 구문을 작성함
int idx = 0;
for (int i = 0; i < 6; i++) {
idx = (int) (charSet.length * Math.random());
str += charSet[idx];
}
return str;
}
// 메일보내기
public void mailSend(MailDTO mailDTO) {
System.out.println("전송 완료!");
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(mailDTO.getAddress());
message.setSubject(mailDTO.getTitle());
message.setText(mailDTO.getMessage());
message.setFrom("내 이메일");
message.setReplyTo("내 이메일");
System.out.println("message"+message);
mailSender.send(message);
}

이렇게 뜨면 성공 ~
JaavaMailSender를 주입하고 sendSimpleMessage 메서드를 통해 이메일을 보내봤네요.
사실 처음 DB에 있는 비밀번호를 알려주려고했는데 Security가 복호화하지 못하기도 하고 암호화를 해버려서...
그래서 그냥 임시 비밀번호를 발급받고 비밀번호를 변경하는 식으로 만들었어요.