[SpringBoot] JavaMailSender Email 보내기

doooly·2023년 12월 29일
1

SpringBoot

목록 보기
1/3

JavaMailSender를 이용해 Email을 보내는 방법에 대해 포스팅하겠습니다 🙂

프로젝트를 진행하며, 회원가입 과정 중 이메일 인증을 위해 인증코드와 이메일을 보내는 기능을 구현해야 했습니다
본 포스팅에서는 인증 코드 내역을 제외한, 이메일을 보내는 방법만을 다루도록 하겠습니다


✅ Gmail 설정

gmail로 이메일을 보내기 위해서는 2단계 인증이 필요합니다
설정 - 보안 - 2단계 인증


로그인을 하고 휴대전화 인증까지 하면 2단계 인증 사용 설정을 마칠 수 있습니다
이제 앱 비밀번호를 설정하러 가봅시다

app name을 입력하고 만들기를 누르면 자동으로 앱 비밀번호가 생성됩니다
이 앱 비밀번호는 다시 볼 수 없고 yml 설정에서 사용될 것이니 잘 보관해주세요 ‼️



✅ Gradle, yml 설정

gradle

mail 기능을 사용하기 위해 build.gradle에 아래와 같은 코드를 추가해줬습니다

// Email
implementation 'org.springframework.boot:spring-boot-starter-mail'

yml

저는 아래와 같이 yml을 설정해줬습니다

#email
  mail:
    host: smtp.gmail.com
    port: 587
    username: 보내는 이메일 주소
    password: 앱비밀번호
    properties:
      mail:
        smtp:
          auth: true
          ssl: false
          starttls:
            enable: true
            required: true
  • mail.host
    smtp.gmail.com 을 사용해 gmail을 이용할 것임을 명시
    naver mail을 사용한다면 naver로 수정
  • mail.port
    gmail은 포트번호 ‼️587‼️을 사용
  • mail.username
  • mail.password
    이메일 계정 비밀번호 말고 위에서 발급받은 앱 비밀번호 사용
  • mail.properties.mail.smtp.auth
  • mail.properties.mail.smtp.starttls
    • enable
    • required

🚨 yml 설정 주의사항

yml을 설정하면서 정말 많은 Exception을 만났는데요 ..🥲
trouble Shooting 하면서 우선적으로 확인해야 할 부분들에 대해서 정리해두고자 합니다
참고하셔서 한 번에 설정 성공하시길 아자자 👊

  • 이메일 주소, 앱 비밀번호 확인
  • host 확인
    smtp.gmail.com
  • 포트번호 확인
  • properties에서 필요한 속성들을 true로 설정했는지 확인
  • ⭐️ 오탈자 확인
    - starttls
    저 같은 경우는 starttsl로 써서 오류가 났었어요 ㅜㅜ
  • 기타) ⭐️ http 확인
    • postman으로 테스트 하는데 http를 https로 기재해서 오류 발생
    • ‼️http를 사용해 테스트 하니 오류 해결‼️



✅ JavaMailSender

본격적으로 JavaMailSender을 사용해봅시다
EmailService를 생성해 파일을 만들어줍니다

  • sendEmail 함수 생성
  • 보낼 이메일 주소, 제목, 내용을 파라미터로 받음
  • SimpleMailMessage 생성
  • message에 필요한 요소들 set
  • javaMailSender.send(message) 를 통해 메세지 전송
@Service
@AllArgsConstructor
public class EmailService {
    private final JavaMailSender javaMailSender;

    public void sendEmail(String to, String subject, String text){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to); //보낼 메일 주소
        message.setFrom(보내는 이메일 주소);
        message.setSubject(subject);
        message.setText(text);
        javaMailSender.send(message);
    }
}

저는 MemberService에서 이메일 서비스를 구현했기 때문에 아래와 같은 코드를 사용했습니다

   String subject = "회원가입 인증 번호\n";
   String authCode = createCode(); //8글자 랜덤
   String text = "인증코드는 " + authCode + " 입니다\n";

  //mail 전송
   emailService.sendEmail(email, subject, text);



Test

postMan을 사용해 테스트 해보면, 아래와 같이 이메일이 잘 오는 것을 확인할 수 있습니다 😁


0개의 댓글