Project/AInfo

[SMTP] SMTP 란?

죵욜이 2025. 3. 2. 00:24

SMTP 가 뭔데?

  • SMTP : Simple Mail Transfer Protocol
  • 이메일을 송신할때 사용하는 인터넷 표준 프로토콜 이다.
    이메일을 보낼때 서버 간의 통신을 담당하며,
    메일 클라이언트 -> 메일 서버
    로 전송하는 역할을 한다.

항상 모든 용어는 그 어원을 이해해야 한다.

Simple 한 Mail 을 Transfer 할때 사용하는 Protocol


SMTP 라는 용어자체를 우리프로젝트에서 처음 접하면

  1. 본인인증을 할때 필요한 특수한 기능인가?
  2. 이메일 관련 기능들을 모아둔 라이브러리 인가?

이런 생각을 할텐데

 

SMT "P"

이것도 프로토콜의 한 종류이다


메일이란 기술이 처음 발명되던 시대에 메일을 주고, 받고 하기위해선

서로 통신이 필요하단건 다들 아실거고

통신할 때 이런식으로 해라!

라고 만들어둔 규칙이라는 것이다.

 

 

CS 지식이 없을땐 그냥 메일작성하고, 보내고, 받고

만 할줄 알았는데 이제는 어떻게 보내지고 받아지는지 를 이해할 필요가 있다

 

과정을 간략하게 설명하면

 

  1. 사람들이 NaverGoogle 에서 메일을 작성 , 그리고 전송버튼을 누름
    • 이때 NaverGoogle 이 이메일 클라이언트가 되는거임
  2. 이메일 클라이언트가 SMTP서버에 연결
    • SMTP서버 : SMTP 가 프로토콜인건 알았죠? 그럼 이 프로토콜로 요청을 보내면 그걸 처리하는 서버가 있어야겠죠? 그게 SMTP 서버입니다
  3. SMTP 서버가 수신자의 메일서버로 메일 전달
  4. 수신자 메일서버가 전달받은 메일을 저장
  5. 수신자가 POP3 또는 IMAP 으로 메일을 가져감
POP3 과 IMAP 이 뭔데?

SM ”T” P 를 보면 유추가능하듯이 이름에 Transfer 는 있는데
보관하는 그런건 없음

 

왜냐?

SMTP 는 단순히 메일을 보내는 역할만 담당함,
수신한 이메일을 보관하는 기능은 없음

 

그래서 메일을 받을때는
POP3(Post Office Protocol 3) 또는
IMAP(Internet Message Access Protocol)

을 사용해야함


그러면 우리프로젝트에서 적용시키려면 SMTP 서버도 추가로 띄워야 하고

SMTP 만 해도 이렇게 알아야할게 많은데 POP3 이나 IMAP 도 알아야해?

 

→ 다 하면 너무나 좋지만 우리는 갈길이 너무 멀어요 효율적인 방법을 찾아야함

 

 

SMTP서버관련

  • Gmail, Naver 등 대부분 이메일 서비스 제공업체가 SMTP서버를 제공
  • 거기에다가 자주 쓰이는거라 장고는 설계철학에 맞게 SMTP를 편하게 쓸수있게 해주고있음
  • 물론 공짜로 쓰려면 횟수제한이 있지만 추후에 AWSSES 같은 SMTP 서비스로 변경하면 됨

POP3, IMAP 관련

  • 우리 프로젝트에서는 메일 발송만 필요하지 메일수신은 불필요함
  • 대화할때 이런용어가 나오면 뭔지 알정도만 공부하고 디테일한 특징같은건 현시점에 불필요
  • 물론 공부하면 좋지만 그시간에 다른거 합시다

사용방법

SMTP설정 → settings.py

# settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # SMTP 백엔드 사용
EMAIL_HOST = 'smtp.gmail.com'  # Gmail SMTP 서버 주소
EMAIL_PORT = 587  # 포트 (TLS: 587, SSL: 465)
EMAIL_USE_TLS = True  # TLS(보안) 사용
EMAIL_HOST_USER = 'your-email@gmail.com'  # Gmail 계정
EMAIL_HOST_PASSWORD = 'your-app-password'  # Gmail 앱 비밀번호
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER  # 기본 발신 이메일

이메일 보내기 → send_mail 사용

from django.core.mail import send_mail

send_mail(
    subject='회원가입 이메일 인증',
    message='이메일 인증을 위해 아래 링크를 클릭하세요.',
    from_email='your-email@gmail.com',  # 발신자 이메일
    recipient_list=['user@example.com'],  # 수신자 이메일
    fail_silently=False,  # 오류 발생 시 예외 발생
)
  • subject: 이메일 제목
  • message: 이메일 본문
  • from_email: 발신자 이메일 (Django settings.py의 DEFAULT_FROM_EMAIL과 동일하게 설정 가능)
  • recipient_list: 리스트 형식으로 수신자 이메일을 넣어야 함
  • fail_silently=False: 이메일 전송 실패 시 오류를 발생시키도록 설정

참고자료

https://docs.djangoproject.com/en/5.1/topics/email/?utm_source=chatgpt.com

 

Sending email | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

 

 

 

'Project > AInfo' 카테고리의 다른 글

[WebSocket] WebSocket 이란? (Django Channels)  (0) 2025.03.14
[Celery] Celery 란?  (0) 2025.03.06
[SMTP] 메일기능 활용  (0) 2025.03.03