본문 바로가기

개발/Spring | Spring Boot

Spring Boot에서 MailSender를 이용하여 Mail 발송하기.

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