spring:
mail:
host: smtp.gmail.com
port: 587
username: 발송할 자신의 실제 or 가계정 이메일
password: NEED_TO_INPUT_ON_SECRET
properties:
mail:
smtp:
auth: true
starttls:
enable: true
spring:
mail:
password: 자신이 받은 웹 비밀번호
spring:
mail:
password: NEED_TO_INPUT
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender mailSender;
private static final String senderEmail = "gusrudchl12@gmail.com";
private static int number;
// 랜덤 발송 번호를 보내기 위한 구문
public static void createNumber(){
//(int) Math.random() * (최댓값-최소값+1) + 최소값
number = (int)(Math.random() * (90000)) + 10000;
}
// 이메일 인증을 하기 위한 createEmail 구문
public MimeMessage createEmail(String email){
createNumber();
MimeMessage message = mailSender.createMimeMessage();
try {
message.setFrom(senderEmail);
message.setRecipients(MimeMessage.RecipientType.TO, email);
message.setSubject("이메일 인증");
String body = "";
body += "<h3>" + "요청하신 인증 번호입니다." + "</h3>";
body += "<h1>" + number + "</h1>";
body += "<h3>" + "감사합니다." + "</h3>";
message.setText(body,"UTF-8", "html");
} catch (MessagingException e){
throw new RuntimeException(e);
}
return message;
}
public int sendEmail(String email){
MimeMessage message = createEmail(email);
mailSender.send(message);
return number;
}
// 회원가입 완료 시 가입 이메일을 보내기 위한 send구문
public void send(String to, String subject, String body) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
mimeMessageHelper.setTo(to); // 메일 수신자
mimeMessageHelper.setSubject(subject); // 메일 제목
mimeMessageHelper.setText(body, true); // 메일 본문 내용, HTML 여부
mailSender.send(mimeMessage); // 메일발송
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
[다른controller에 작성하였음, 프로젝트 진행 중에 하였음.]
emailService.send(memberForm.getEmail(), "서비스 가입을 환영합니다!", "회원가입 환영 메일");
이렇게 되면 회원가입 후 이메일 작성한 곳으로 회원가입 완료되었다는 메일 전송 완료
그다음 이메일 인증을 하기위한
controller에 코드를 작성
@Controller
@RequiredArgsConstructor
public class EmailController {
private final EmailService emailService;
@ResponseBody
@RequestMapping(value = "/email")
public String emailSend(@RequestParam("email") String email){
int number = emailService.sendEmail(email);
String num = "" + number;
return num;
}
}
이메일 인증을 위해 ajax와 오류 방지를 위한 csrf를 이용하여 스크립트를 작성
혹시모르니 config구문에도 권한을 허가해 주기 위한
.requestMatchers("/email/**").permitAll() 구문 작성
작성 후 html 이메일 발송을 위한 코드 작성
<div class="relative mb-5">
<label for="email" class="block mb-2 text-sm font-medium text-gray-900">이메일
</label>
<input type="email" id="email" name="email" th:field="*{email}"
class="absolute shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
required>
<button type="button" id="sendBtn" name="sendBtn" onclick="sendNumber()" class="relative left-full text-white top-0.5 bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none
focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2">
인증 요청
</button>
<div id="email_number" name="email_number" class="mt-8">
<input type="text" name="number" id="number" placeholder="인증번호 입력"
class="absolute shadow-sm bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5">
<button type="button" name="confirmBtn" id="confirmBtn" onclick="confirmNumber()" class="relative left-full text-white top-0.5 bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none
focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2">이메일 인증
</button>
</div>
</div>