본문 바로가기

프로그래밍/Spring

스프링 이메일 보내기

1. pom.xml 에 메일 보내기에 필요한 것을 추가한다.

spring-context-support 의 버전은 현재 스프링 버전과 똑같은 것으로 한

<!-- email dependency -->

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->

<dependency>

    <groupId>javax.mail</groupId>

    <artifactId>mail</artifactId>

    <version>1.4.7</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context-support</artifactId>

    <version>4.1.7.RELEASE</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.integration/spring-integration-mail -->

<dependency>

    <groupId>org.springframework.integration</groupId>

    <artifactId>spring-integration-mail</artifactId>

    <version>4.1.7.RELEASE</version>

</dependency>


1-1. root-context에 추가한다.

  <!--이메일 인증 구현 -->

  <!-- 메일 보내기  -->

  <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="password" />

   

      <!-- email 요청시는 SMTP -->

      <property name="javaMailProperties">

        <props>

            <prop key="mail.transport.protocol">smtp</prop>

            <prop key="mail.smtp.auth">true</prop>

            <prop key="mail.smtp.starttls.enable">true</prop>

            <prop key="mail.debug">true</prop>

        </props>

      </property>

  </bean>


1-3. 구글에 들어가서 보안수준허용을 바꾸어준다.



1-4. gmail 환경설정에 들어가서 전달 및 POP/IMAP 설정을 밑에 처럼 바꾸어준다.




2. MailService 만든다.

public interface MailService {

/** mail

 * @param subject

 * @param text

 * @param from 관리자 이메일

 * @param to 사용자 이메일

  **/

boolean send(String subject, String text, String from, String to);

}


3. MailServiceImpl 만든다. 어노테이션으로 서비스 선언해주고 JavaMailSender 임포트

@Service

public class MailServiceImpl implements MailService {


private final JavaMailSender javaMailSender;

@Autowired

public MailServiceImpl(JavaMailSender javaMailSender) {

this.javaMailSender = javaMailSender;

}

@Override

public boolean send(String subject, String text, String from, String to) {

MimeMessage message = javaMailSender.createMimeMessage();

try {

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

helper.setSubject(subject);

helper.setText(text);

helper.setFrom(from);

helper.setTo(to);

javaMailSender.send(message);

return true;

} catch (MessagingException e) {

e.printStackTrace();

}

return false;

}


}


4. root-context 에 만들어준 서비스 추가

  <bean id="mailService" class="kr.co.my.MailServiceImpl">

  </bean>



5. MemberController 에 추가된 항목


@Autowired

private MailService mailService;













4. applicationContext.xml 가 없어서 만들어주었다.



src/main/webapp/WEB-INF/spring/appServlet  밑에서 command-N(Ctrl-N) 누른 뒤에 spring을 검색하면 나오는 Spring Bean Configuration file 을  applicationContext.xml 라는 이름으로 만들어준다. 만들 때 next를 눌러서 aop, beans, p, tx 추가해준다.




5. listener 은 원래 있었고, context-param 새로 작성해 주었다.

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring/appServlet/applicationContext</param-value>

</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>