본문 바로가기
WEB/SPRING

Springboot에서 java-email 활용하기

by snow_white 2022. 11. 21.

pom.xml

spring-boot-starter-email 추가

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

application.properties

SMTP 설정

spring.mail.host=smtp.naver.com
spring.mail.port=465 # naver 포트
spring.mail.username=송신용이메일@naver.com
spring.mail.password=송신용이메일의비밀번호
spring.mail.properties.debug=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable= true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.ssl.trust=smtp.naver.com

 

EmailConfig 파일 생성

import java.util.Properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
@PropertySource("classpath:application.properties")
public class EmailConfig {

    @Value("${spring.mail.username}")
    private String id;
    @Value("${spring.mail.password}")
    private String password;
    @Value("${spring.mail.host}")
    private String host;
    @Value("${spring.mail.port}")
    private int port;

    @Bean
    public JavaMailSender javaMailService() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();

        javaMailSender.setHost(host); // smtp 서버 주소
        javaMailSender.setUsername(id); // 설정(발신) 메일 아이디
        javaMailSender.setPassword(password); // 설정(발신) 메일 패스워드
        javaMailSender.setPort(port); //smtp port
        javaMailSender.setJavaMailProperties(getMailProperties()); // 메일 인증서버 정보 가져온다.
        javaMailSender.setDefaultEncoding("UTF-8");
        return javaMailSender;
    }

    private Properties getMailProperties() {
        Properties properties = new Properties();
        properties.setProperty("mail.transport.protocol", "smtp"); // 프로토콜 설정
        properties.setProperty("mail.smtp.auth", "true"); // smtp 인증
        properties.setProperty("mail.smtp.starttls.enable", "true"); // smtp starttls 사용
        properties.setProperty("mail.debug", "true"); // 디버그 사용
        properties.setProperty("mail.smtp.ssl.trust",host); // ssl 인증 서버 주소
        properties.setProperty("mail.smtp.ssl.enable","true"); // ssl 사용
        return properties;
    }
}

 

Controller

@GetMapping(value = "/")
public ResponseEntity<?> method(...) throws Exception {
	...생략
	userService.sendSimpleMessage(to, content);
}

 

Service

@PropertySource("classpath:application.properties")
@Slf4j
@RequiredArgsConstructor
@Service
public class UserServiceImpl implements UserService {

final JavaMailSender javaMailSender; // final 키워드 필수

@Override
	public void sendSimpleMessage(String to, String content) throws Exception {
		MimeMessage message = createMessage(to, content);
        try{
            javaMailSender.send(message); // 메일 발송
        }catch(MailException es){
            es.printStackTrace();
            throw new IllegalArgumentException();
        }
}

@Override
	public MimeMessage createMessage(String to, String content) throws MessagingException, UnsupportedEncodingException {
        log.info("보내는 대상 : " + to);
        log.info("content : " + content);
        MimeMessage  message = javaMailSender.createMimeMessage();

        message.addRecipients(MimeMessage.RecipientType.TO, to); // to 보내는 대상
        message.setSubject("메일 제목"); //메일 제목

        // 메일 내용 메일의 subtype을 html로 지정하여 html문법 사용 가능
        String msg="";
        // 생략
        msg += "<div>" + content + "</div>";

        message.setText(msg, "utf-8", "html"); //내용, charset타입, subtype
        message.setFrom(new InternetAddress(id,"admin")); //보내는 사람의 메일 주소, 보내는 사람 이름
        return message;
	}
}

'WEB > SPRING' 카테고리의 다른 글

배치 서비스  (0) 2023.05.10
Springboot properties 파일 분리 (local, prod, ...)  (0) 2023.03.17
[Spring] AOP 프로그래밍  (0) 2022.06.03
[Spring] 빈(Bean) 🟢  (0) 2022.06.03
[Spring] 컴포넌트 스캔  (0) 2022.06.03

댓글