2016년 1월 8일 금요일

Spring JavaMail Sender [by using gmail account]

Project Architecture



pom.xml


 4.0.0
 org.blog.test
 email-by-gmail-project
 0.1.0
 
  org.springframework.boot
  spring-boot-starter-parent
  1.3.1.RELEASE
 
 
  
   org.springframework.boot
   spring-boot-starter-web
  
  
   org.projectlombok
   lombok
   1.16.6
  
  
   ch.qos.logback
   logback-core
   1.1.3
  
  
   ch.qos.logback
   logback-classic
  
  
   ch.qos.logback
   logback-access
  
  
   org.springframework
   spring-context-support
  
 
 
  1.8
 


application.properties

============================================
# Email Info
============================================
mail.host=smtp.gmail.com
mail.port=587
mail.username=test_account@gmail.com
mail.password=test_password

mail.password value is the app password of google 2-step verification

Email.java

package org.blog.test.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Email {

    private String sender;

    private String recipient;

    private String subject;

    private String content;
}

EmailService

package org.blog.test.email.service;

import javax.mail.MessagingException;

import org.blog.test.model.Email;

public interface EmailService {

    void send(Email email) throws MessagingException;
}

EmailServiceImpl.java

package org.blog.test.email.service.impl;

import java.util.Date;

import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.blog.test.email.service.EmailService;
import org.blog.test.model.Email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    @Override
    public void send(Email email) throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        message.setSubject(email.getSubject());
        message.setSender(new InternetAddress(email.getSender()));
        message.setRecipient(RecipientType.TO, new InternetAddress(email.getRecipient()));
        message.setText(email.getContent());

        message.setSentDate(new Date());

        javaMailSender.send(message);
    }

}

TestApplication.java

package org.blog.test;

import java.util.Properties;

import org.blog.test.email.service.EmailService;
import org.blog.test.model.Email;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@SpringBootApplication
public class TestApplication implements CommandLineRunner {

    @Value(value = "${mail.host}")
    private String javaMailHost;

    @Value(value = "${mail.port}")
    private int javaMailPort;

    @Value(value = "${mail.username}")
    private String javaMailUserName;

    @Value(value = "${mail.password}")
    private String javaMailPassword;

    @Autowired
    private EmailService emailService;

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class);
    }

    @Bean
    public JavaMailSender javaMailSender() {
        Properties mailSmtpStarttlsEnable = new Properties();
        mailSmtpStarttlsEnable.setProperty("mail.smtp.starttls.enable", "true");

        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();      
        javaMailSender.setHost(javaMailHost);
        javaMailSender.setPort(javaMailPort);
        javaMailSender.setUsername(javaMailUserName);
        javaMailSender.setPassword(javaMailPassword);
        javaMailSender.setJavaMailProperties(mailSmtpStarttlsEnable);

        return javaMailSender;
    }

    @Override
    public void run(String... arg0) throws Exception {
        Email email = new Email("dont_reply", "test_recipient@naver.com", "test email", "this is the test");
        emailService.send(email);
    }
}

Execution Result

댓글 없음 :

댓글 쓰기