BJSNuruhee / levelup

0 stars 0 forks source link

[SpringBoot] SMTP서버를 통한 이메일 기능 구현 (Google SMTP) #45

Closed yejun95 closed 9 months ago

yejun95 commented 10 months ago

Google SMTP 서버를 이용한 이메일 기능 구현

✔ JavaMailSender

✔ pom.xml

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



image



✔ JavaMailSender와 MailSender 차이

MailSender

image

JavaMailSender

✔ application.properties SMTP 셋팅

image

# 이메일 발송 정보 세팅
spring.mail.host=smtp.gmail.com 
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.username=발신자의 구글 이메일주소
spring.mail.password=발급받은 앱 비밀번호 12자리
spring.mail.port=587
spring.mail.transport.protocol=smtp
spring.mail.debug=true
spring.mail.default.encoding=UTF-8
spring.mail.mime.charset=UTF-8

✔ 구글 보안 설정

image

image

image

image



✔ DTO 생성

// EmailMessage.java

public class EmailMessage {

    private String to;

    private String subject;

    private String message;

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }       
}




✔ Controller 생성

// EmailController

@RestController
@RequestMapping(value = "/api")
public class EmailController {

    @Autowired
    EmailService emailService;

    @PostMapping("/sendMail")
    public ResponseEntity sendMail() {
        EmailMessage emailMessage = new EmailMessage("xodlf100@gmail.com", "테스트 메일 제목", "테스트 메일 본문");
        emailService.sendMail(emailMessage);
        return new ResponseEntity(HttpStatus.OK);
    }

}

✔ Service 생성

// EmailService.java

@Service
public interface EmailService {

    public void sendMail(EmailMessage emailMassage);
}




✔ ServiceImpl 생성

@Service
public class EmailServiceImpl implements EmailService {

    @Autowired
    JavaMailSender javaMailSender;

    public void sendMail(EmailMessage emailMessage) {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
            mimeMessageHelper.setTo(emailMessage.getTo()); // 메일 수신자
            mimeMessageHelper.setSubject(emailMessage.getSubject()); // 메일 제목
            mimeMessageHelper.setText(emailMessage.getMessage(), false); // 메일 본문 내용, HTML 여부
            javaMailSender.send(mimeMessage);
            System.out.println("메시지 전송 성공");
        } catch (MessagingException e) {
            System.out.println("메시지 전송 실패!!!!!");
            throw new RuntimeException(e);
        }
    }
}




✔ api 테스트

image



Reference

june.log : Spring MailSender (SMTP)
Gwangyong Jeong : [Spring] SMTP 서버를 이용한 이메일 발송