Spring Boot에서는 외부 SMPT를 이용하여 Mail을 발송할 수 있다.
이 글에서는 Google SMTP를 사용하였으며, SMTP 설정법은 다른 글에서 참조하기 바란다.
1. 설정법
Spring Boot에서 MailSender를 이용하려면 아래 두 방법 중 선택하여 사용하면 된다.
1.1. Spring Boot Starter 설정 시 Java Mail Sender를 추가한다.
1.2. pom.xml에 아래의 코드를 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. application.properties에 아래의 코드를 추가한다.
#Java MailSender
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.username=gmail주소
spring.mail.password=gmail비밀번호
2. 사용법
@Autowired
JavaMailSender mailSender;
@Value("${spring.mail.username}")
String sendFrom;
@Autowired
Environment env;
public boolean sendMail() {
String sendTo = "받는 사람 주소";
String mailTitle = "Mail Title";
String mailContent = "Mail Content";
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
final MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true,"UTF-8");
message.setTo(sendTo);
message.setFrom(sendFrom); //env.getProperty("spring.mail.username")
message.setSubject(mailTitle);
message.setText(mailContent, true); //ture : html 형식 사용
//Mail에 img 삽입
ClassPathResource resource = new ClassPathResource("img 주소/img 이름.png");
message.addInline("img", resource.getFile());
}
};
try{
mailSender.send(preparator);
} catch (MailException e){
return false;
}
return true;
}
1. Method 호출부에서 boolean 타입으로 Mail 발송 성공 여부를 알 수 있도록 return 타입을 boolean으로 하였다.
2. sendFrom의 경우 application.properties에서 설정 된 발송자에서 가져왔는데,
1) @value annotation을 이용하여 가져오거나
2) Environment Class의 getProperty() Method를 이용하여 가져올 수 있다.
3. message.setText() Method의 boolean 타입인 두번째 인자는 html형식을 사용 여부 설정이다.
4. mailContent의 경우 Jsoup을 이용하여 작성한 html 파일에서 가져오면 간편하다.
4.1. Jsoup
4.1.1. 설정법
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
4.1.2.사용법
String body = "";
try {
Document doc = Jsoup.connect("html위치/html파일.html").get();
mailContent = doc.html();
} catch (IOException e) {
//Exception
}
5. Jsoup 등 외부 라이브러리를 사용하지 못하는 환경이나, 사용하고 싶지 않다면 String으로 만들어도 된다.
String mailContent = "<div>내용</div>";
6. addInline() Mehod를 사용하여 이미지를 Mail과 함께 보낼 수도 있다.
1) 위의 코드에서 작성한 addInline() Method의 첫 번째 인자를 html 파일 내부에 아래와 같이 <img> 태그의 src 속성에
'cid:인자명'으로 넣으면 된다.
<img src='cid:img'>
7. 동적으로 변경해야 하는 부분이 있는 경우 replace() Method를 이용하면 편하다.
//이름을 동적으로 바꾸고 싶은 경우
public String setName(String mailContent, String name){
return mailContent = mailContent.replace("##name##", name);
}
3. 주의사항
1. <script>는 필터 되기 때문에 사용하지 않는다.
2. google메일의 경우 반환 값이 정보 전달 여부만 판단하기 때문에 메일 주소가 틀린 등의 이유로 실제로 발송이 안 되는
경우가 있다. 때문에 validation을 확실히 해줘야 하며, 등록한 gmail계정을 정기적으로 확인해야 한다.
'개발 > Spring | Spring Boot' 카테고리의 다른 글
Spring Boot 특징 (0) | 2022.09.09 |
---|---|
Spring Boot에서 Intercepter 설정하기 (0) | 2019.09.26 |
Spring Boot에서 JWT사용 법 (0) | 2019.09.25 |
JSON Web Token(JWT)란? (0) | 2019.09.25 |