-
SMTP 서버를 통한 이메일 보내기Spring 2021. 10. 26. 22:43
spring에서 이메일 보내기 🌱
패스워드를 잊어버렸을때 임시비밀번호를 생성해서 등록된 유저의 이메일로 보내주도록 해보자.
dependency
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
먼저 메일을 이용하기 위해서 spring-boot-starter-mail을 dependency에 추가해준다.
네이버 이메일 host 등록하기
먼저 사용할 메일 환경설정에 들어가서 smtp사용을 사용함으로 설정해준다.
application.properties
#Mail spring.mail.host=smtp.naver.com spring.mail.port=가려진 포트번호를 가져와서 등록 spring.mail.username=보내려는 이메일 spring.mail.password=네이버 비밀번호 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true spring.mail.properties.mail.smtp.ssl.trust=smtp.naver.com spring.mail.properties.mail.smtp.starttls.enable=true
ssl연결을 해주고, 보내는 사람 이메일로 등록할 이메일과 (smtp열어준 이메일) 비밀번호, auth, trust 설정을 완료해준다.
port는 개인으로 열린 port 번호를 사용한다.
메일 보내기 설정
@Service @RequiredArgsConstructor public class UserService { private final JavaMailSender mailSender; @Value("${spring.mail.username}") private String sender; public String sendForgotPassword(String email) { User user = userRepository.findByEmail(email); if(user==null){ throw new UserNotFoundException("User not found with email : " + email); }else{ String tempPassword = getTempPassword(); user.setPassword(passwordEncoder.encode(tempPassword)); userRepository.save(user); //메세지를 생성하고 보낼 메일 설정 저장 SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email); message.setFrom(sender); message.setSubject(user.getFullname()+" : New Temporary Password is here!"); message.setText("Hello" + user.getFirstname() + "! We send your temporary password here. \nBut this is not secured so please change password once you sign into our site. \nPassword : " + tempPassword); mailSender.send(message); return "Temporary password sent to your email."; } } //임시 비밀번호 발급 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; } }
임시비밀번호를 발급하여 비밀번호를 설정하고 설정된 비밀번호를 등록된 메일로 보낸다.
MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message,"UTF-8"); helper.setTo(email); helper.setFrom(sender); helper.setSubject(user.getFullname()+" : New Temporary Password is here!"); helper.setText("Hello" + user.getFirstname() + "! We send your temporary password here. \nBut this is not secured so please change password once you sign into our site. \nPassword : " + tempPassword); mailSender.send(message);
위와 같이 MimeMessage로도 보내는 것이 가능하다. (exception처리는 해주어야 한다)
( 참고한 사이트 )
https://1-7171771.tistory.com/85
'Spring' 카테고리의 다른 글
Amazon S3를 이용해서 파일 저장, 삭제하기 (0) 2021.11.05 Springboot(Maven), React, MySQL 프로젝트 Heroku 배포하기 (0) 2021.11.05 OAuth2 사용해서 react와 함께 소셜로그인 기능 만들기 (4) 2021.10.26 TDD (Test Driven Development) : 단위 테스트 작성하기 (0) 2021.10.26 JPA delete 쿼리가 실행되지 않을 때 (0) 2021.10.26