안녕하세요 cocy입니다.
이번 포스팅에서는 Spring에서 이메일 발송기능을 구현해 보도록 하겠습니다.
기능의 목표를 간략히 설명드리면 데이터베이스에 저장된 이메일 템플릿에서
원하는 내용이 셋팅된 빈을 매칭하여 이메일의 내용을 채우고 발송는 것까지입니다.
먼저 스프링에서 이메일을 보내기위해 설정할 부분을 설명드리겠습니다.
iis와 같은 윈도우기반 웹서버는 이메일 발송기능을 제공하지만
Tomcat에서는 지원하지 않아, 별도의 이메일서버가 필요합니다.
하지만 gmail을 사용하면 이메일서버 없이도 구현가능합니다.
대신 gmail의 계정이 필요합니다. gmail계정을 생성후 아래와 같이
spring설정파일(dispatcher_servlet.xml or applicationContext.xml)에 추가해주시면 됩니다.
<!-- 이메일 보내기 -->
<
bean
id
=
"mailSender"
class
=
"org.springframework.mail.javamail.JavaMailSenderImpl"
>
<
property
name
=
"host"
value
=
"smtp.gmail.com"
/>
<
property
name
=
"port"
value
=
"587"
/>
<
property
name
=
"username"
value
=
"userid@gmail.com"
/>
<
property
name
=
"password"
value
=
"userpw"
/>
<
property
name
=
"javaMailProperties"
>
<
props
>
<
prop
key
=
"mail.smtp.starttls.enable"
>true</
prop
>
</
props
>
</
property
>
</
bean
>
그 다음은 Controller에서 사용하는 방법입니다.
간략한 이메일 정보를 담기위해 Email.java 클래스를 다음과 같이 만들어줍니다.
public
class
Email {
private
String subject;
private
String content;
private
String regdate;
private
String reciver;
public
String getReciver() {
return
reciver;
}
public
void
setReciver(String reciver) {
this
.reciver = reciver;
}
public
String getSubject() {
return
subject;
}
public
void
setSubject(String subject) {
this
.subject = subject;
}
public
String getContent() {
return
content;
}
public
void
setContent(String content) {
this
.content = content;
}
public
String getRegdate() {
return
regdate;
}
public
void
setRegdate(String regdate) {
this
.regdate = regdate;
}
}
그리고 컨트롤러에서 사용하기전에 클래스를 하나 만들어 컨테이너에 등록시키도록 하겠습니다.
import
javax.mail.internet.InternetAddress;
import
javax.mail.internet.MimeMessage;
import
javax.mail.internet.MimeMessage.RecipientType;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.mail.javamail.JavaMailSender;
import
org.springframework.stereotype.Component;
import
com.bean.Email;
@Component
public
class
EmailSender {
@Autowired
protected
JavaMailSender mailSender;
public
void
SendEmail(Email email)
throws
Exception {
MimeMessage msg = mailSender.createMimeMessage();
msg.setSubject(email.getSubject());
msg.setText(email.getContent());
msg.setRecipient(RecipientType.TO ,
new
InternetAddress(email.getReciver()));
mailSender.send(msg);
}
}
@Component 어노테이션은 해당 빈을 스프링 컨테이너에 등록시키기 위한 것이며,
@Autowired로 스프링 설정파일에서 설정한 JavaMailSender 객체를 불러다 쓸 수 있습니다.
그 다음은 컨트롤러에서 이를 사용하는 코드입니다.
@Controller
@RequestMapping
(
"/email"
)
public
class
EmailController {
@Autowired
private
EmailSender emailSender;
@RequestMapping
(
"/send"
)
public
ModelAndView sendEmailAction ()
throws
Exception {
Email email =
new
Email();
String reciver =
"reciver@email.com"
;
//받을사람의 이메일입니다.
String subject =
"이메일 제목"
;
String content =
"이메일 내용입니다."
;
email.setReciver(reciver);
email.setSubject(subject);
email.setContent(content);
emailSender.SendEmail(email);
return
new
ModelAndView(
"success"
);
}
}
스프링을 다룰 줄 아신다는 전제하에 간략한 설명만 드리도록 하겠습니다.
domain/applicationContext/email/send 요청을 받으면 이를 분석해서 sendEmailAction을 실행시킵니다.
먼저 이메일 객체를 생성하고 내용을 채운뒤
미리 정의한 emailSender객체를 사용하여 이메일을 발송합니다.
이후 뷰를 반환합니다.
다음 포스팅에서는 이를 효과적으로 사용하기위해
이메일 템플릿 데이터베이스를 구성하고
가져온 템플릿으로 엔티티빈을 셋팅하는 부분을 설명토록 하겠습니다.
수고하셨습니다.
다음글(bean을 이용한 이메일 템플릿 셋팅) : http://cusmaker.tistory.com/165
'Lecture > Spring' 카테고리의 다른 글
[본격 이메일 보내기 part2] java reflect를 이용한 이메일 템플릿 빈 셋팅 (0) | 2013.04.22 |
---|---|
[Spring Tool Suite] 스프링에서 제공하는 STS 개발 환경 설치하기 (0) | 2012.12.09 |
[본격 게시판짜기 Part3.8 Spring MVC] rest-ful 서비스에서 정적 자원 사용 (53) | 2012.11.04 |
[본격 게시판짜기 Part3.7 Spring MVC] JSON 요청이란? (4) | 2012.10.29 |
[본격 게시판짜기 Part3.6 Spring MVC] multipartResolver를 활용한 파일업로드 변경하기 (5) | 2012.10.29 |