Web/Spring
[Spring/스프링] Spring boot email 보내기
poopooreum
2024. 10. 7. 11:46
반응형
안녕하세요!
오늘은 Spring boot에서 원하는 email로 data를 보내는 방법에 대해서 포스팅을 해보겠습니다.
email로 data를 보내기 위해서는 spring boot에서 코드만 짜는 것이 아닌 발신 이메일에 대한 설정을 해야 하는데요,
이 두 가지 모두 적어보겠습니다!
그리고 포스팅하기에 앞서 제가 올릴 코드들의 간단한 로직을 설명드리자면, front에서 requestBody안에 서비스 유형, 이름, 회사명, 전화번호, 이메일 주소, 문의 내용을 보내면 back에서 InquiryAddDTO로 내용을 받아온 뒤, 데이터를 가공해서 이 내용들을 보내고자 하는 이메일 주소로 보내줍니다.
✏️ 이메일 설정하기
- 먼저 자신의 구글 계정에 들어간 뒤 구글 계정 관리를 클릭합니다.
- 보안 버튼을 클릭한 뒤 앱 비밀번호 생성을 클릭합니다.
- 여기서 만들어진 비밀번호를 복사해서 메모장 같은 곳에 저장합니다.
- 주의할 점으로는 앱 비밀번호를 만들기 위해서는 구글 계정이 2차 인증이 설정이 되어 있어야 합니다.
이렇게 나온 비밀번호를 저장하면 계정 설정은 완료입니다!
✏️ build.gradle 설정 추가
// email
implementation 'org.springframework.boot:spring-boot-starter-mail'
✏️ application.yml 설정 추가
spring :
mail:
host:
smtp.gmail.com
port:
587
username: 구글 계정 이름(@gmail.com은 안쓰셔도 됩니다.)
password: 위에서 만든 앱 비밀번호
properties:
mail:
smtp:
auth: true
starttls:
enable: true
✏️ InquiryController 생성
public class InquiryController {
private final InquiryService inquiryService;
@PostMapping("/add")
public ResponseEntity<ResponseDTO<Object>> addInquiry(@Valid @RequestBody InquiryAddDTO inquiryAddDTO) {
inquiryService.sendInquiryByMail(inquiryAddDTO.getService(),inquiryAddDTO.getName(),inquiryAddDTO.getCompany(),inquiryAddDTO.getTel(),inquiryAddDTO.getEmail(),inquiryAddDTO.getQuestion());
return new ResponseEntity<>(ResponseDTO.builder().error(false).message("문의사항 등록을 완료하였습니다.").data(null).build(), HttpStatus.OK);
}
}
✏️ InquiryService 생성
public interface InquiryService {
void sendInquiryByMail(String service, String name, String company, String tel, String email, String question);
}
✏️ InquiryServiceImpl 생성(이 코드가 이메일을 보내는 핵심 로직)
public class InquiryServiceImpl implements InquiryService {
private final JavaMailSender javaMailSender;
private static final String emailAddress = "";
@Override
public void sendInquiryByMail(String service, String name, String company, String tel, String email, String question) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(emailAddress);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mailMessage.setSubject("문의 내용 " + dateFormat.format(new Date()));
String emailResponse = "";
emailResponse +="서비스 희망 항목 :"+service+"\n성명 : "+name +"\n회사 : "+company+"\n연락처 : "+tel + "\n이메일 : "+email + "\n문의 내용 : "+question;
mailMessage.setText(emailResponse);
javaMailSender.send(mailMessage);
}
}
✏️ InquiryAddDTO 생성
public class InquiryAddDTO {
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String service;
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String name;
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String company;
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String tel;
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String email;
@NotNull
@Length(max = 1000, message = "입력할 수 있는 최대 길이는 1000입니다")
private String question;
}
반응형