Message

Message

로그인 & 가입하기
전체
에밀리아
웃음
ART
생각
Tech
관식
Timeline

스프링 메일 발송

작성자 : gwansik
Tech
입력 : 2017-06-07 수 15:30
수정 : 2017-06-07 수 15:30

Send Mail using Spring JavaConfig (Spring 메일 발송)

〃framework/spring 2014.06.26 17:23



Spring을 이용한 메일 보내기를 하기 위해서 대부분 JavaMailSender를 <bean />으로 설정하고 

요리조리 코드를 잘 복사 붙여넣기 하여 구현하였다


오늘의 핵심은 xml없는 Spring 프레임워크 만들기


Spring3.0 부터 Java 코드를 이용한 DI 설정이 가능해 지면서

복잡하다고만 느꼈던 xml 설정을 Java 코드로 모두 대체 할 수 있게 됐다



<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="id@gmail.com" />
<property name="password" value="pw" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
view rawsendmail.xml hosted with ❤ by GitHub


위와 같이 작성됐던 xml 코드를 Java Config 를 이용해서 Java 코드로 사용 가능하다


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@Configuration
public class MailConfig {
@Bean
public static JavaMailSender mailSender(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("host");
mailSender.setUsername("username");
mailSender.setPassword("password");
return mailSender;
}
}
view rawMailConfig.java hosted with ❤ by GitHub


Bean을 가져다가 사용하는 컨트롤러는 기존코드와 변화가 없다

단순하게 Bean 설정을 xml에서 Java 코드로 변환한것 뿐이다


import javax.mail.internet.MimeMessage;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MailController {
@Autowired
private JavaMailSender mailSender;
private String from = "보내는사람";
private String subject = "메일제목 (생략가능)";
@RequestMapping(value = "/mail")
public String sendMail() {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
messageHelper.setTo("받는사람");
messageHelper.setText("메일본문");
messageHelper.setFrom(from);
messageHelper.setSubject(subject); // 메일제목은 생략이 가능하다
mailSender.send(message);
} catch(Exception e){
System.out.println(e);
}
return "Sucess";
}
}
view rawMailController.java hosted with ❤ by GitHub





== 참고 ==


메일보내기를 구현하는 도중 메일이 죽어라 발송이 되지 않았다

굉장히 단순한 문제였는데 아차 하는 순간 놓치게 되는것 같다

기본중에 기본!!


1. javax.mail-1.x.x.jar 파일이 필요하다

- jar 파일이 없으면 빈을 생성하지 못한다. 톰캣 실행도 못해보고 계속 삽질만

- maven을 사용한다면 아래의 dependency를 추가하면 된다


<!-- Java Mail API -->

<dependency>

    <groupId>javax.mail</groupId>

    <artifactId>mail</artifactId>

    <version>1.4.3</version>

</dependency>



2. 보내는 사람이 없으면 발송이 되지 않는다

 단순 테스트를 위해 보내는 사람은 가볍게 무시하고 계속 발송을 시도했으나 메일 발송이 되지 않았다

 기존에 있는 코드와 비교해보니 보내는 사람이 빠져 있었고 보내는 사람을 추가하니 그제서야 메일이 정상적으로 발송되었다

- 제목은 생략이 가능하다


MimeMessage message = mailSender.createMimeMessage();

MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");

messageHelper.setTo("받는사람");

messageHelper.setText("Test!! blabla...");

messageHelper.setFrom("보내는사람");    // 보내는 사람이 필요하다





출처: http://noviceany.tistory.com/61 [novice in anything]