[22/03/19]一時パスワードによる電子メール送信機能の実装
36932 ワード
🧐 デザイン
スプリングガイド勾配を設定してEメールを送信
注https://javacoding.tistory.com/148
Java SMTP利用—NAVERメール利用
SMTPとは?
簡易メール転送プロトコル(SMTP)
これは、インターネット上で電子メールを送信するためのプロトコルです.メールサーバ間の送受信.
メールクライアントからメールサーバにメールを送信する際にもよく使われます.(出典:ウィキペディア)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-mail'
}
application.yml設定
Eメール送信時に使用するEメールアカウントの設定
管理者のEメールアカウントとパスワードを記録します.
羽状バニラの上に置くときはgitignoreを使います
バニラの上に置くのを無視します.
やってみたが成功しなかった
緊急時のみ開発とプレゼンテーションを行う場合
パスワードを入力して削除...
spring:
mail:
host: smtp.naver.com
port: 465
username: 아이디@naver.com
password: 이메일 비번
properties:
mail.smtp.auth: true
mail.smtp.ssl.enable: true
パスワードhtmlを検索<!--임시 비번 모달-->
<div id="findPw" class="modal fade">
<div class="modal-dialog modal-dialog-centered modal-login">
<div class="modal-content">
<div class="modal-body">
<div class="container my-auto">
<div class="row">
<div class="card z-index-0 fadeIn3 fadeInBottom">
<div class="card-header p-0 position-relative mt-n4 mx-3 z-index-2">
<div class="bg-gradient-primary shadow-primary border-radius-lg py-3 pe-1">
<h4 class="text-white font-weight-bolder text-center mt-2 mb-0">비밀번호 찾기</h4>
</div>
</div>
<div class="card-body">
<form role="form" class="text-start" action="/member/sendEmail" method="post" name="sendEmail">
<p>입력한 이메일로 임시 비밀번호가 전송됩니다.</p>
<div class="input-group input-group-outline my-3">
<label class="form-label">Email</label>
<input type="email" id="userEmail" name="memberEmail" class="form-control" required>
</div>
<div class="text-center">
<button type="button" class="btn bg-gradient-primary w-100 my-4 mb-2"
id="checkEmail">비밀번호 발송</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<button type="button" class="btn btn-link" data-bs-toggle="modal"
data-bs-target="#findPw">비밀번호를 잊으셨나요?</button>
<script>
$("#checkEmail").click(function () {
const userEmail = $("#userEmail").val();
const sendEmail = document.forms["sendEmail"];
$.ajax({
type: 'post',
url: 'emailDuplication',
data: {
'memberEmail': userEmail
},
dataType: "text",
success: function (result) {
if(result == "no"){
// 중복되는 것이 있다면 no == 일치하는 이메일이 있다!
alert('임시비밀번호를 전송 했습니다.');
sendEmail.submit();
}else {
alert('가입되지 않은 이메일입니다.');
}
},error: function () {
console.log('에러 체크!!')
}
})
});
</script>
Mail.dto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MailDTO {
private String address;
private String title;
private String message;
}
MemberController
// 이메일 보내기
@Transactional
@PostMapping("/sendEmail")
public String sendEmail(@RequestParam("memberEmail") String memberEmail){
MailDTO dto = ms.createMailAndChangePassword(memberEmail);
ms.mailSend(dto);
return "/member/login";
}
MemberService
// 메일 내용을 생성하고 임시 비밀번호로 회원 비밀번호를 변경
@Override
public MailDTO createMailAndChangePassword(String memberEmail) {
String str = getTempPassword();
MailDTO dto = new MailDTO();
dto.setAddress(memberEmail);
dto.setTitle("Cocolo 임시비밀번호 안내 이메일 입니다.");
dto.setMessage("안녕하세요. Cocolo 임시비밀번호 안내 관련 이메일 입니다." + " 회원님의 임시 비밀번호는 "
+ str + " 입니다." + "로그인 후에 비밀번호를 변경을 해주세요");
updatePassword(str,memberEmail);
return dto;
}
//임시 비밀번호로 업데이트
@Override
public void updatePassword(String str, String userEmail){
String memberPassword = str;
Long memberId = mr.findByMemberEmail(userEmail).getId();
mmr.updatePassword(memberId,memberPassword);
}
//랜덤함수로 임시비밀번호 구문 만들기
@Override
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 < 10; i++) {
idx = (int) (charSet.length * Math.random());
str += charSet[idx];
}
return str;
}
// 메일보내기
@Override
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("보낸이@naver.com");
message.setReplyTo("보낸이@naver.com");
System.out.println("message"+message);
mailSender.send(message);
}
//비밀번호 변경
@Override
public void updatePassWord(Long memberId, String memberPassword) {
mmr.updatePassword(memberId,memberPassword);
}
よく応用されています!
Reference
この問題について([22/03/19]一時パスワードによる電子メール送信機能の実装), 我々は、より多くの情報をここで見つけました https://velog.io/@hellocdpa/220319-임시비밀번호-이메일로-보내는-기능-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol