spring을 공부하면서 메일 전송 쪽 기능을 구현해보고 싶어서 이 기능을 해봤다.
프론트가 한 분이셔서 이 기능이 들어갈 지는 모르겠지만 해보고 싶어서 해봄용
implementation 'org.springframework.boot:spring-boot-starter-mail'
비밀번호를 찾는 사용자들에게 메일을 보내줘야 하는데, 그 이메일에 대한 정보를 써준다.
특히 저 마지막줄에 있는 spring.mail.protocol=smtps
이 부분때문에 계속 고생했다.
저 친구를 안써주거나 smtp 에서 s 를 빠트리면
org.springframework.mail.MailSendException: Mail server connection failed;
nested exception is javax.mail.MessagingException:
Got bad greeting from SMTP host: smtp.naver.com,
port: 465, response: [EOF]
이러한 에러를 마주하게 된다.
여기까지 기본적인 세팅을 끝내놓은 후 SMTP를 사용하지 않는 ID 찾기부터 해보았다.
로직은 매우 간단했다. 회원가입할 때 작성했던 닉네임으로 memberRepository를 뒤진 후 그 값을 반환하는 것이다.
음.. 순조로워..
다음!
먼저 private final JavaMailSender javaMailSender;
를 선언해준다.
JavaMailSender 를 타고타고 들어가보면
음...
mail 관련 친구들이 많이 보인다.
MimeMessageHelper
를 선언하였다.
생성자의 두 번째 인자 true 는 멀티파트 메세지를 사용하겠다는 뜻 이라고 한다.
setFrom(발신자 메일 주소)
, setTo(수신인 주소)
, setSubject(제목)
, setText(메일 내용)
등이 있다.
setTo는 수신인 주소인데 member.getUsername() 을 넣어줬다.
그 밑에는 StringBuilder의 body 객체를 선언해서 .append()
를 통해 값을 넣어주고 마지막에 mimeMessageHelper.setText() 로 넣어줬다.
그렇게 되면
이런식으로 된다.
하지만 나는 사진도 넣고 싶고 그런데?? 어카지???
답은 있었다.
이런식으로 html을 직접 짜주면 된다!
content+= "<img src=\"https://drive.google.com/uc id=1SGWzVrlaSnIm_V95GgBvjdI56FvLn5hH\">";
이 이미지 링크는 구글 드라이브로 설정해주면 된다.
결과
주석되어있는 친구는 파일 첨부이다. txt도 가능하던데 신기하다.
무튼 저렇게 짜준 후 내 원래 목적인 비밀번호 변경은
String password = passwordEncoder.encode(pw);
member.pwUpdate(password);
인코딩을 해준 후 저장을 해주었다.
비밀번호 변경 로직이다.
더러워도 어쩔 수 없,,,
BCryptPasswordEncoder 의 객체를 생성 후 .match()를 사용하여 json으로 넘어온 비밀번호와 인코딩되서 저장된 비밀번호를 비교한다.
너무 재밌는 기능이었고, 이게 개발을 하는 이유가 아닌가 싶다.
재밌어!!!!!!!!!!!!!!
에러 해결에 큰 도움 되었습니다! 잘 보고 갑니다! ㅎㅎ