JavaMailSender

dalBeen·2023년 10월 23일
0

스프링

목록 보기
11/14

스프링 프레임워크에서 메일서버(SMTP server)를 이용하여 메일을 전송하는 방법에 대해 알아보자

SMTP 서버란

일반적으로 전자 메일 전송을 위한 표준 프로토콜이다
(이메일을 송신하는 서버)

순서

1 . 연결 설정 단계 : SMTP 클라이언트가 TCP를 이용해 SMTP 서버와 세션을 설정
2 . 연결 설정이 완료되면 SMTP 서버에 메일을 보내는 데이터 전송 단계를 진행 (송신자, 수신자의 주소 및 메일 제목과 같은 헤더 정보)
3 . 메일 전송을 완료하면 TCP 연결을 종료하는 연결해제 단계가 진행되며 SMTP가 종료됨

POP3 Server??

이메일을 수신하는 서버(자신에게 온 메일을 받아오려면 POP3서버에 자신의 계정을 가지고 있어야함)

  • 자신에게온 메일은 POP3서버에 저장되며 이것을 메일 프로그램을 통해서 자신의 컴퓨터로 받아볼 수 있음
  • 자신의 도메인이 전산실의 서버에 심어져 있기 때문에 POP3서버를 사용해서 자신의 도메인 메일 주소로 온 메일을 받아볼 수 있음
  • 독립 메일 계정 또는 POP3 메일 계정은 개인 전용의 이메일 계정을 의미하며, 이 계정에는 비밀번호가 설정되어 있어서 해당 사용자만이 액세스하고 전송,수신등의 기능들을 할 수 있음
smtp서버와 pop3서버가 조금 헷갈린다...
->
SMTP 서버: "우체국의 발송 창구"와 같습니다.
당신이 친구에게 편지를 보내고 싶을 때, 그 편지를 쓴 후에 우체국의 발송 창구에 가서 편지를 넣습니다.
SMTP 서버는 이 편지(이메일)를 적절한 받는 사람에게 전달하는 역할을 합니다.

POP3 서버: "우체국의 수령 창구"나 "당신의 우편함"과 같습니다.
누군가 당신에게 편지를 보냈다면, 그 편지는 당신의 우편함(POP3 서버)에 보관됩니다.
당신이 편지(이메일)를 확인하고 싶을 때, 우편함을 열어 편지를 확인합니다.
POP3는 편지를 "수령"하는 역할을 합니다.

JavaMailSender

1. build.gradle에 의존성 추가

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

2. Gmail SMTP Server설정

  • 구글 계정만 있으면 무료로 발송할 수 있음
spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: {YOUR_GMAIL_ADDRESS}
    password: {YOUR_GMAIL_PASSWORD}
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
  • mail.smtp.auth: true
    이 설정은 SMTP 서버에 접속할 때 인증을 필요로 한다는 것을 나타냄.true로 설정되면, 이메일을 보낼 때 username과 password 정보를 제공해야 SMTP 서버에 로그인하고 메일을 보낼 수 있음.여기서는 Gmail 계정의 이메일 주소와 비밀번호가 필요하므로 인증이 필수적

  • mail.smtp.starttls.enable: true
    STARTTLS는 SMTP 서버와의 통신을 암호화하기 위한 기술.
    true로 설정하면, 이메일 클라이언트와 SMTP 서버 간의 모든 통신은 암호화되어 중간에서 데이터를 가로채기가 힘들어짐.
    포트 587은 일반적으로 STARTTLS를 사용한 SMTP 연결에 사용됨. 따라서 starttls.enable을 true로 설정하는 것은 이 포트에서 이메일을 보낼 때 필요한 보안 조치

3. 코드작성

  • 간단한 메일 보내는 건 SimpleMailMessage 사용
    (메일 제목, 단순 텍스트 내용)
@RequiredArgsConstructor
@Component
public class MailComponents {
    
    //메일 전송을 위해 mailSender를 빈으로 등록(의존성 주입)
    private final JavaMailSender javaMailSender;
    
    public void sendMailTest() {
    
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setTo("test@naver.com");
        msg.setSubject("안녕하세요.");
        msg.setText(" 안녕하세요. 이메일 테스트입니다 ");
        
        javaMailSender.send(msg);
    }
}
  • 멀티파트 데이터 처리시 MimeMessage
public boolean sendMail(String mail, String subject, String text) {
        
        boolean result = false;
        
        MimeMessagePreparator msg = new MimeMessagePreparator() {
            @Override
            public void prepare(MimeMessage mimeMessage) throws Exception {
            	//멀티파트 메세지를 허용하겠다
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
                mimeMessageHelper.setTo(mail);
                mimeMessageHelper.setSubject(subject);
                mimeMessageHelper.setText(text, true);
            }
        };
        
        try {
            javaMailSender.send(msg);
            result = true;
            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        
        return result;
    }
 -  mimeMessageHelper.setText( (String),true) : html를 사용하겠다
 -  mimeMessageHelper.setFrom()  : 메일주소에 이름과 이메일 주소 모두 표기하겠다

참고블로그
참고블로그

profile
깊게 공부해보자

0개의 댓글