2017년 3월 10일 금요일

Spring Framework에서 JavaMailSender로 메일 보내기.

Spring의 JavaMailSender를 추가하기 위해서는 spring-context-support jar 파일을 반드시 lib폴더에 추가해야 한다.
또한 javax.mail 관련 jar 파일도 포함 해야 한다.
maven repository에서 가져올 경우

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${version.spring}</version>
</dependency>

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

상기의 2개를 추가해서 lib폴더에 추가.

아래는 JavaMailSender를 위한 Java Config 설정이다.

import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
:
:

@Bean
public static JavaMailSender mailSender() {
JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl();
mailSenderImpl.setHost("smtp.naver.com");
mailSenderImpl.setPort(587);
mailSenderImpl.setUsername("사용자 메일 계정");
mailSenderImpl.setPassword("비밀번호");
mailSenderImpl.setDefaultEncoding("UTF-8");

Properties javaMailProps = new Properties();
javaMailProps.put("mail.smtp.auth", true);
javaMailProps.put("mail.smtp.starttls.enable", true);

mailSenderImpl.setJavaMailProperties(javaMailProps);

return mailSenderImpl;
}

Service로 호출을 하기 위해서 먼저 Interface를 정의한다.

package org.uniworks.groupware.service;

/**
 * @author gomoosin
 *
 */
public interface EmailSender {
public <T> boolean emailSender(T report);
}

EmailSender를 구현한 클래스는 아래와 같다.

package org.uniworks.groupware.service.internal;

import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.uniworks.groupware.service.EmailSender;

/**
 * @author gomoosin
 *
 */
@Service
public class EmailSenderImpl implements EmailSender {
private static final Logger logger = LoggerFactory.getLogger(EmailSenderImpl.class);
@Autowired JavaMailSender javaMailSender;

/* (non-Javadoc)
* @see org.uniworks.groupware.service.EmailSender#emailSender(java.lang.Object)
*/
@Override
public <T> boolean emailSender(T report) {
// TODO Auto-generated method stub
logger.debug("Sending report by email....");
boolean retVal = false;

try {
            final String emailTo = "test01@gmail.com";
            final String emailFrom = "test01@naver.com";
            final String subject = "test subject";
            final String message = (String) report;

            javaMailSender.send(new MimeMessagePreparator() {

                @Override
                public void prepare(MimeMessage paramMimeMessage) throws Exception {
                    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(paramMimeMessage, true, "UTF-8");

                    mimeMessageHelper.setTo(emailTo);
                    mimeMessageHelper.setFrom(emailFrom);
                    mimeMessageHelper.setSubject(subject);
                    mimeMessageHelper.setText(message);

                    /*
                    final File file = new File("test filename");

                    mimeMessageHelper.addAttachment(MimeUtility.encodeText("filename"), new InputStreamSource() {

                        @Override
                        public InputStream getInputStream() throws IOException {
                            // TODO Auto-generated method stub
                            return new FileInputStream(file);
                        }
                    });
*/                  
                };
            });

            retVal = true;
        } catch (Exception e) {
            logger.error("Can't send email... " + e.getMessage(), e);
        }

return retVal;
}

}

위에 만든 Service를 호출해서 테스트한 테스트 케이스는 아래와 같다.

package org.uniworks.groupware.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.uniworks.groupware.common.config.AppConfig;
import org.uniworks.groupware.common.config.BoneCPConfig;

/**
 * @author gomoosin
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
public class EmailSenderTest {
@Autowired private EmailSender emailSender;

@Test
public void emailSenderTest() {
emailSender.emailSender("text message......");
}
}

댓글 없음:

댓글 쓰기