스프링

스프링부트 이메일 발송(구글 계정 이용)

nan2 2022. 6. 20. 17:51
반응형

 

1. spring-boot-starter-mail 라이브러리 추가

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3'

 

2. application.properties 에 설정 세팅

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username= //구글 계정 xxxxxxxxxxx@google.com
spring.mail.password= //구글 보안 -> 앱 비밀번호 16자리 생성하여 넣어줌
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

spring.mail.transport.protocol=smtp
spring.mail.debug=true
spring.mail.default-encoding=UTF-8

 

3. mailConfiguration 작성하기

package com.reviewer.portfolio.config;

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.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class EmailConfig {
	
	@Value("${spring.mail.transport.protocol}")
	private String protocol;
	
	@Value("${spring.mail.properties.mail.smtp.auth}")
	private String auth;
	
	@Value("${spring.mail.properties.mail.smtp.starttls.enable}")
	private String starttls;
	
	@Value("${spring.mail.debug}")
	private String debug;
	
	@Value("${spring.mail.host}")
	private String host;
	
	@Value("${spring.mail.port}")
	private int port;
	
	@Value("${spring.mail.username}")
	private String username;
	
	@Value("${spring.mail.password}")
	private String password;
	
	@Value("${spring.mail.default-encoding}")
	private String encoding;
	
	@Bean
	public JavaMailSender javaMailSender() {
		JavaMailSenderImpl javaMailSenderImpl = new JavaMailSenderImpl();
		Properties properties = new Properties();
		properties.put("mail.transport.protocol", protocol);
		properties.put("mail.smtp.auth", auth);
		properties.put("mail.smtp.starttls.enable", starttls);
		properties.put("mail.smtp.debug", debug);
		
		javaMailSenderImpl.setHost(host);
		javaMailSenderImpl.setUsername(username);
		javaMailSenderImpl.setPassword(password);
		javaMailSenderImpl.setPort(port);
		javaMailSenderImpl.setJavaMailProperties(properties);
		javaMailSenderImpl.setDefaultEncoding(encoding);
		
		return javaMailSenderImpl;
	}
}

 

4. 뷰

<div class="mb-3">
	<label for="username" class="form-label">이메일</label>
	<input type="email" class="form-control" id="email" name="email" placeholder="email@google.com">
	<input type="button" value="인증" id="certifiedEmail" class="btn btn-primary">
</div>

 

/* 이메일 인증 */
	$('#certifiedEmail').on('click', function(){
		var data = {
			email : $('#email').val()
		};
		console.log(data);
		$.ajax({
			url: '/account/certifiedEmail',
			type: 'post',
			data: data,
			dataType: "json",
			success: [function(resp){
				console.log(resp);
			}],
			error: function(resp){
				console.log(resp);
			}
		})
	});

 

5. 컨트롤러

@Controller
@RequiredArgsConstructor
@RequestMapping("/account")
public class AccountController {

	@Autowired
	private JavaMailSender javaMailSender;
	
	@PostMapping("/certifiedEmail")
	public void certifiedEmail(@RequestParam("email") String email) {
		
		System.out.println(email);
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setTo(email);								// email 주소
		simpleMailMessage.setSubject("[포폴리뷰어 인증메일]");		// mail 제목
		simpleMailMessage.setText("포폴리뷰어입니다.");				// mail 내용
		
		javaMailSender.send(simpleMailMessage);
	}
	
}

 

6. 결과 확인

반응형