본문 바로가기
Programming/JS & TS

[Back-End] 이메일 프로토콜 (SMTP, IMAP, POP) & Nodemailer 사용법

by 강한수달 2022. 1. 4.

SMTP (Simple Mail Transfer Protocol)

- TCP 25번 포트 사용

- SMTP는 연결 지향 텍스트 기반의 프로토콜

- 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다고 규정되어 있음

 

<CR><LF> 란?

: 타자기에서 유래된 말로 각 단어는 아래와 같은 의미를 지님
 - CR(Carriage Return) : 현재 커서를 줄 올림 없이 맨 앞으로 이동, 아스키코드로는 0x0D
 - LF(Line Feed) : 커서는 그 자리에 그대로 둔 상황에서 종이만 한 줄 올려 줄을 바꿈, 아스키코드로는 0x0A

 

SMTP 통신 예시 [1]

[1] Wikipedia, 간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP).

 

SMTP 기본 명령어 모음 [4]

[4] SMTP basic commands

 

IMAP (Internet Messaging Access Protocol)

TCP 143번 포트 사용

- 원격 서버로부터 TCP/IP 연결을 통해 이메일을 가져오는데 사용

- 온라인 모드와 오프라인 모드를 모두 지원

- POP3를 사용할 때와 달리 이메일 메시지를 서버에 남겨 두었다가 나중에 지울 수 있음

- 서버 트래픽이 많이 쓰임

 

SMTP 와 IMAP [6]

[6] SMTP, POP3, IMAP 차이

 

POP (Post Office Protocol)

TCP 110번 포트 사용

- 보통 POP 라는 명칭은 POP3 프로토콜을 의미함

- POP는 원격 서버에 접속하여 이메일을 가져온 후, 서버에서 이메일을 삭제함

- 구현이 쉽고, 많은 클라이언트에서 지원함

 

IMAP 과 POP 프로토콜의 차이점 [7]

[7] Google, TCP/IP-Windows

 

NodeMailer

NodeMailer 란?

: Node.js 환경에서 Email 전송을 할 수 있도록 도와주는 모듈, 이메일 전송에 많이 사용됨

 

사전 준비

- 모듈 설치 

$ npm i nodemailer

 

- 가상 메일 서버

: Mailtrap 을 활용하여 진행될 예정이며 아래와 같이 준비가 필요함

 

1) Mailtrap.io 에 회원가입

 

2) "Inboxes" 에서 "My Inbox" 링크 클릭 (없다면 Add Inbox 버튼을 눌러 새로 생성)

3) Mailtrap.io 의 API 사용 시 필요한 인증 정보 확인, "Show Credentials" 클릭

 

 

4) 테스트 이메일 정보를 확인하기 위해 "Email Address" 탭 클릭

 

5) 테스트 이메일 정보 확인

 

 

예제코드

- example.js

"use strict";
const nodemailer = require("nodemailer");

const testAccount = {
    "host" : "smtp.mailtrap.io",
    "port" : 25, // Show Credential 에서 확인한 지원되는 포트 중 하나
    "secure" : false, // TLS 를 사용하지 않으면 false, 아니면 true
    "auth" : {
        "user" : "a38a38f9be0733", // Show Credential 에서 확인한 Username
        "pass" : "f6d05f32112128", // Show Credential 에서 확인한 Password
    }
}

const send = async (data) => {
    nodemailer.createTransport(testAccount).sendMail(data, function(err, info){
        if(err){
            console.log(err);
        }else {
            console.log(info);
            return info.response;
        }
    });
}

const content = {
    from : "mightyotter@tistory.com",
    to : "8a87e08ea4-2275bd@inbox.mailtrap.io", // mailtrap.io 의 Email Address 부분
    subject : "BBM - 노력은 배신하지 않는다",
    text : "성공에는 간단한 공식이 있다. 무엇이건 최선을 다해라. 모두들 그것을 좋아할 것이다.",
    html : "<h2> 7번 넘어져도 8번 일어나라 </h2>"
}

send(content);

 

 

# Reference

[1] Wikipedia, 간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)

  URL : https://ko.wikipedia.org/wiki/간이_우편_전송_프로토콜

[2] Wikipedia, 인터넷 메시지 접속 프로토콜(Internet Message Access Protocol, IMAP)

  URL : https://ko.wikipedia.org/wiki/인터넷_메시지_접속_프로토콜

[3] Wikipedia, 포스트 오피스 프로토콜(Post Office Protocol, POP)

  URL : https://ko.wikipedia.org/wiki/

[4] Tistory, SMTP Basic commands

  URL : https://cheershennah.tistory.com/133

[5] Tistory, SMTP POP3 IMAP 이란?

  URL : https://sambalim.tistory.com/60

[6] Naver, SMTP, POP3, IMAP 차이

  URL : https://m.blog.naver.com/ijoos/221742035684

[7] Google, TCP/IP-Windows

  URL : https://sites.google.com/site/dustanshomepage/tools-for-success/a1-videos/connecting-to-networks/tcp-ip-windows

[8] Velog, Node.js에서 메일 전송하기 (feat. Nodemailer & Gmail)

  URL : https://velog.io/@josworks27/Back-end-Node.js에서-메일-전송하기-feat.-Nodemailer-Gmail

[9] Velog, NodeJS-nodemailer-모듈을-이용한-Gmail-API-사용-hhjwgcmhsh

  URL : https://velog.io/@npcode9194/NodeJS-nodemailer-모듈을-이용한-Gmail-API-사용-hhjwgcmhsh

[10] Youtube, 개발자의품격 - Node.js - 이메일 보내기 기능 구현하기 (Nodemailer)

  URL : https://www.youtube.com/watch?v=ezReImKeq2U

 

댓글