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> |
위와 같이 작성됐던 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; |
| |
| } |
|
|
| } |
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"; |
| } |
| |
| } |
== 참고 ==
메일보내기를 구현하는 도중 메일이 죽어라 발송이 되지 않았다
굉장히 단순한 문제였는데 아차 하는 순간 놓치게 되는것 같다
기본중에 기본!!
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("보내는사람"); // 보내는 사람이 필요하다