SMTP

의문점

  1. SMTP가 뭐길래 이메일은 SMTP로 따로 빼서 작성해야 하는가?

  2. 내가 설정해준 아래 설정이 대체 무엇일까?

    this.emailUser = configService.get<string>('EMAIL_USER');
        const emailPassword = configService.get<string>('EMAIL_PASSWORD');
        this.transporter = nodemailer.createTransport({
          host: 'smtp.gmail.com',
          port: 587,
          secure: false,
          auth: {
            user: this.emailUser,
            pass: emailPassword,
          },
        });
    

SMTP가 무엇일까?

SMTP의 작동 과정

  1. SMTP는 전송 프로토콜임, 전송 제어 프로토콜(TCP)을 이용하므로 클라이언트와 서버 사이 TCP 연결로 시작한다. Hello 명령(HELO 혹은 EHLO)으로 이메일 전송 프로세스를 시작한다.

    ⇒ 여기서 클라이언트는 지메일과 같은 웹 애플리케이션을 의미함.

  2. 이메일 데이터 전송, 클라이언트가 이메일 헤더(대상 및 제목 줄 포함), 이메일 본문, 기타 추가 구성 요소로 이루어진 실제 이메일 컨텐츠와 함께 일련의 명령을 서버로 보낸다.

  3. 메일 전송 에이전트(MTA), 서버가 MTA라는 프로그램을 실행한다. MTA는 수신자의 이메일 주소 도메인을 확인하고 발신자와 다를 경우, 수신자의 IP 주소를 찾도록 도메인 네임 시스템(DNS)에 쿼리한다. (비유하자면, 우체국에서 우편물 수신자의 우편번호를 조회하는 것과 비슷)

  4. 연결 닫힘, 데이터 전송이 완료되면 클라이언트가 서버에 알림을 보내며 서버는 연결을 닫는다. 서버는 이메일 데이터를 클라이언트로부터 추가로 받지 않는다.

    → 그러면 SMTP 연결을 새로 열면 어떻게 되는데? 새로운 이메일로 보내지는 건가?

⇒ 보통 첫 번째 이메일 서버는 이메일의 실제 최종 목적지가 아니다. 그래서 클라이언트로부터 이메일을 수신한 서버는 다른 메일 서버와 위 과정을 도착할 때까지 반복한다.

SMTP 봉투?