Spring google SMTP settings공부방/Spring2023. 10. 29. 18:54
Table of Contents
오늘 작업은 SMTP를 이용한 메일 발송이에요.
서비스를 만드는데 고객의 임시 비밀번호 발급을 위해 사용해야 하기에
메모로 남겨두어요.
1. 먼저 고객에게 메일을 발송할 Google 계정을 만들고, 보안 -> 2단계 인증까지 설정을 해줘요.
2. 다시 보안 -> 2단계 인증 -> 앱 비밀번호 화면으로 들어가서 앱 비밀번호 설정을 해주어요.
App name을 본인의 서비스 이름에 맞게 입력하면 비밀번호가 생성됩니다.
생성된 비밀번호는 잠시 메모장에 기록해 주세요.
3. Gmail 서비스로 이동후 설정 -> 전달 및 POP/IMAP 탭으로 이동후
- 모든 메일에 POP 사용하기
- IMAP 사용
이 두 개를 모두 사용으로 바꿔주고 변경사항을 저장하세요.
4. spring에 메일서버와 연결을 하기 위한 의존성 추가를 해주어요!
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail/3.1.5
gradle
implementation 'org.springframework.boot:spring-boot-starter-mail'
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>3.1.5</version>
</dependency>
5.
mail:
host: smtp.gmail.com # SMTP 서버 호스트
port: 587 # SMTP 서버 포트 (기본)
username: sweet # google 아이디 (sweet@gmail.com 에서 sweet만 적으세요.)
password: 12345678 # 앱 비밀번호 (위에서 메모에 두었던 비밀번호를 적어주세요.)
properties:
mail:
smtp:
auth: true # 사용자 인증 시도 여부
timeout: 5000 # Socket Read Timeout
starttls:
enable: true # StartTLS 활성화 여부
6. 이제 실제 메일을 보낼 서비스를 만들어 볼까요?
FindPasswordService.kt
package com.example.securityjwt.infrastructure.persistence.smtp
import jakarta.mail.MessagingException
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.mail.javamail.JavaMailSender
import org.springframework.mail.javamail.MimeMessageHelper
import org.springframework.stereotype.Service
@Service
class FindPasswordService {
@Autowired
private val javaMailSender: JavaMailSender? = null
fun sendMail(email: String): Boolean {
return try {
val mimeMessage = javaMailSender!!.createMimeMessage()
val mimeMessageHelper = MimeMessageHelper(mimeMessage, false, "UTF-8")
mimeMessageHelper.setTo(email) // 메일 수신자
mimeMessageHelper.setSubject("Test 임시 이메일 발송") // 메일 제목
mimeMessageHelper.setText("테스트 이메일 발송", false) // 메일 본문 내용, HTML 여부
javaMailSender.send(mimeMessage)
true
} catch (e: MessagingException) {
throw RuntimeException(e)
}
}
}
Controller.kt
@GetMapping("/find/password")
@ResponseStatus(HttpStatus.OK)
suspend fun findPassword(
@RequestParam(required = false, value = "email") email: String?,
): AccountFindPasswordResponseDto {
if(email?.isBlank() == true) return AccountFindPasswordResponseDto(false)
findPasswordService.sendMail(email!!)
return AccountFindPasswordResponseDto(true)
}
7. 요청 !
8. 결과
이메일 전달이 아주 잘 되었어요!!!
이제 나머지 기능은 여러분의 능력에 맡길게요!
반응형
'공부방 > Spring' 카테고리의 다른 글
Spring LocalDateTime response array로 내려올때 해결 방법 (1) | 2023.10.31 |
---|---|
Spring boot swagger 설정시 주의 사항 (0) | 2023.10.29 |
How to install h2 in mac os (맥에서 h2 설치하기) (0) | 2023.02.12 |
@soycrab :: 꿀맛코딩
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!