본문 바로가기
Lecture/Spring

[본격 이메일 보내기 part1] gmail을 이용한 spring 이메일 발송 기능 설정

by cusmaker 2013. 4. 22.
반응형

안녕하세요 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