본문 바로가기

TroubleShooting/Spring

Spring 에서 MailSender 를 이용한 send mail

728x90

스프링이 지원하는 JavaMailSenderImpl(org.springframework.mail.javamail.JavaMailSenderImpl) 클래스를 이용하면 메일 보내는 서비스를 간단하게 작성할 수 있다. 사용을 위해서는 com.springsource.javax.mail-1.4.X.jar 가 필요하다.


보통은 스프링 컨택스트 파일에 빈으로 등록을 하지만, 다른 곳에서 메일 설정값을 읽어오는 부분이 있어서 직접 sender 를 구성하는 예제를 작성해 보았다.

@Test
	public void test() throws MessagingException {
		JavaMailSenderImpl sender = new JavaMailSenderImpl();
		sender.setHost("smtp.gmail.com");
		sender.setPort(587);
		sender.setUsername("firstboos");
		sender.setPassword("패스워드");
		Properties prop = new Properties();
		prop.setProperty("mail.smtp.auth", "true");
		prop.setProperty("mail.smtp.starttls.enable", "true");
		sender.setJavaMailProperties(prop);
		MimeMessage message = sender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(message);
		helper.setTo("jeoos43@naver.com");
		helper.setText("Thank you for ordering!");
		sender.send(message);
	}

sender.SetUsername(), sender.setPassword(), sender.setJavaMailProperties() 는 SMTP 서버에서 인증이 필요할때 설정하는 값이다.


참고로 스프링 빈으로 등록해서 사용하는 일반적인 방법은 다음과 같다.

- 빈(bean) 설정

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

    <property name="host" value="${mail.host}">

    <property name="username" value="${mail.username}">

    <property name="password" value="${mail.password}">

    <property name="port" value="${mail.port}">

    <property name="javaMailProperties">

        <props>

            <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>

            <prop key="hostname">${mail.host}</prop>

        </props>

    </property>

</bean>


- 사용 예제

@Service
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private MessageSource messageSource;

    @Override
    public void sendMail(String subject, String text, String fromUser, String toUser, String[] toCC) {
        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
            messageHelper.setSubject(subject);
            messageHelper.setTo(toUser);
            messageHelper.setCc(toCC);
            messageHelper.setFrom(fromUser);
            messageHelper.setText(text, true);
            mailSender.send(message);

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}


도움 받은 사이트 :

http://www.mkyong.com/spring/spring-sending-e-mail-via-gmail-smtp-server-with-mailsender/

https://support.google.com/mail/answer/13287?hl=en

http://blog.saltfactory.net/58