본문 바로가기

spring

Spring을 이용한 메일 보내기

Spring에서 org.springframework.mail package 아래 class들을 사용하서 편리하게 메일을 보낼 수 있습니다.

org.springframework.mail.SimpleMailMessage class를 사용해서 메일을 보낼텐데.. classpath에 해당 class가 포함되어 있지 않다면 다음과 같이 library를 추가해 줍니다.

pom.xml

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.3.0.RELEASE</version>
</dependency>

다음과 같이 Spring bean설정을 합니다.

servlet-context.xml

<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl"
    p:host="stmp.test.co.kr"
    p:username="from@test.co.kr"
    p:password="test"
/>

다음과 같이 위에서 설정한 javaMailSendImpl bean을 이용해서 메일을 보냅니다.

HomeController.java

package com.tistory.aircook;

import java.util.Locale;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @Autowired
    private JavaMailSenderImpl javaMailSenderImpl;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) throws Exception {

        //일반 텍스트메일
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("from@test.co.kr");
        simpleMailMessage.setTo("to@test.co.kr");
        simpleMailMessage.setSubject("Simple 테스트 메일");
        simpleMailMessage.setText("메일 내용입니다.");

        javaMailSenderImpl.send(simpleMailMessage);

        //HTML 메일
        MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage();
        mimeMessage.setFrom(new InternetAddress("from@test.co.kr"));
        mimeMessage.addRecipient(RecipientType.TO, new InternetAddress("to@test.co.kr"));
        mimeMessage.setSubject("Mime 테스트 메일");
        mimeMessage.setText("<b>메일 내용입니다.</b>", "UTF-8", "html");

        javaMailSenderImpl.send(mimeMessage);

        return "home";
    }
}

메일을 보내기 위해서는 mail을 보내기 위한 다음 library가 필요합니다. 

maven을 통해 확인하면 아시겠지만.. 아래 library는 activation에 대해 의존성을 가지고 있습니다.

pom.xml

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

그런데 위 library에 대해 버전을 올릴려고 하니.. groupId와 artifactId가 아래와 같이 바뀌었네요.

http://stackoverflow.com/questions/22020533/javamail-api-from-maven

pom.xml

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.6</version>
</dependency>