[스프링부트] 이메일 발송하기
2023. 5. 7. 23:47ㆍ스프링부트 프로젝트
1, 앱 비밀번호 설정
구글 계정 - 보안 - 2단계인증 선택 후 진행
2.build.gradle 설정
dependencies에 추가
implementation 'org.springframework.boot:spring-boot-starter-mail' /* 이메일 전송 */
3. application.properties
application.properties에 아래와 같이 설정
# Mail Setting
# 이메일의 기본 인코딩 방식을 UTF-8로 설정
spring.mail.default-encoding=UTF-8
# 이메일 발송에 사용될 SMTP 서버 호스트 주소를 설정, 구글의 SMTP 서버를 사용
spring.mail.host=smtp.gmail.com
# SMTP 서버와 통신에 사용될 포트 번호를 설정
spring.mail.port=587
# 이메일 발송에 사용될 계정의 이메일 주소를 설정
spring.mail.username= 자신 구글 계정
# 이메일 발송에 사용될 계정의 비밀번호를 설정
spring.mail.password= 2차비밀번호
# TLS 암호화를 사용하여 이메일을 전송
spring.mail.properties.mail.smtp.starttls.enable=true
# TLS 암호화를 필수로 사용
spring.mail.properties.mail.smtp.starttls.required=true
# SMTP 인증을 사용
spring.mail.properties.mail.smtp.auth=true
# 디버깅을 위한 설정으로, 이메일 발송 과정에서 발생하는 문제를 추적
spring.mail.properties.mail.debug=true
# 이메일 본문의 인코딩 방식을 UTF-8로 설정
spring.mail.properties.mail.mime.charset=UTF-8
# 이메일을 전송할 프로토콜을 SMTP로 설정
spring.mail.properties.mail.transport.protocol=smtp
4. MailDto
아래와 같이 MailDto.java 작성
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class MailDto {
private String emailAddr; // 받는 사람
private String emailTitle; // 메일 제목
private String emailContent;// 메일 내용
}
5. EmailService
아래와 같이 EmailService.java 작성
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import com.comverse.Iedu.domain.MailDto;
import lombok.AllArgsConstructor;
@Service
@AllArgsConstructor
public class EmailService {
@Autowired
private JavaMailSender emailSender;
public void sendSimpleMessage(MailDto mailDto) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("jjh4523a@gmail.com");
message.setTo(mailDto.getEmailAddr());
message.setSubject("[문의사항 답변입니다] " + mailDto.getEmailTitle());
message.setText("[문의사항 답변입니다] " + mailDto.getEmailContent());
emailSender.send(message);
}
}
6. Controller
아래와 같이 Controller.java 작성
private final EmailService emailService;
public BoardController(EmailService emailService) {
this.emailService = emailService;
}
// 문의 답변 작성
@PostMapping("/addAnswer.do")
public String addAnswer(AnswerDto aDto, MailDto mailDto) {
if (aDto.getStatus().equals("E")) {
emailService.sendSimpleMessage(mailDto); // 이메일전송
}
return "board/questionDetail :: #answerList";
}
7. html
ajax로 값을 넘긴 후 email 발송
<tr>
<th class="text-center" scope="row">* 처리내용</th>
<td class="" colspan="3">
<th:block th:if="${lastAnswer.status == 'E'}">
<span th:text="${lastAnswer.body}"></span>
<input type="hidden" name="questionId" id="questionId" th:value="${qDto.questionId}">
</th:block>
<th:block th:if="${lastAnswer.status != 'E'}">
<textarea id="answer" name="body" class="form-control" rows="3"
placeholder="처리내용을 입력해주세요." required></textarea>
<input type="hidden" name="questionId" id="questionId" th:value="${qDto.questionId}">
</th:block>
</td>
</tr>
// 처리내용 작성 ajax
function insertAnswer(event) {
if (!$("#answer").val()) {
alert("내용을 입력하세요.");
} else {
var aDto = {
status : $("#status").val(),
body : $("#answer").val(),
questionId : $("#questionId").val(),
emailTitle: document.getElementById('emailTitle').value,
emailAddr: document.getElementById('emailAddr').value,
emailContent: $("#answer").val()
};
showLoading(); // 로딩화면 표시
$.ajax({
url : "/board/addAnswer.do",
data : aDto,
type : 'POST',
success : function(result) {
if (aDto.status === 'E') {
alert('이메일이 발송되었습니다.');
location.reload();
} else {
getAnswer();
$("#answer").val("");
}
},
error: function(error) {
console.error(error);
alert('이메일 발송에 실패하였습니다.');
},
complete: function() {
hideLoading(); // ajax 완료 후 로딩화면 숨기기
}
})
}
}
'스프링부트 프로젝트' 카테고리의 다른 글
[스프링부트] 파일 업로드 (0) | 2023.05.10 |
---|---|
[스프링 부트] 게시판 만들기 프로젝트 - 13. run.html (0) | 2023.05.07 |
[스프링 부트] 게시판 만들기 프로젝트 - 12. 본문 수정 화면 (0) | 2023.05.07 |
[스프링 부트] 게시판 만들기 프로젝트 - 11. 글쓰기 및 댓글 작성(Ajax) 화면 (0) | 2023.05.07 |
[스프링 부트] 게시판 만들기 프로젝트 - 10. 회원가입 및 로그인 화면 (0) | 2023.04.19 |