SMTP 가 뭔데?
- SMTP : Simple Mail Transfer Protocol
- 이메일을 송신할때 사용하는 인터넷 표준 프로토콜 이다.
이메일을 보낼때 서버 간의 통신을 담당하며,
메일 클라이언트 -> 메일 서버
로 전송하는 역할을 한다.
항상 모든 용어는 그 어원을 이해해야 한다.
Simple 한 Mail 을 Transfer 할때 사용하는 Protocol
SMTP 라는 용어자체를 우리프로젝트에서 처음 접하면
- 본인인증을 할때 필요한 특수한 기능인가?
- 이메일 관련 기능들을 모아둔 라이브러리 인가?
이런 생각을 할텐데
SMT "P"
이것도 프로토콜의 한 종류이다
메일이란 기술이 처음 발명되던 시대에 메일을 주고, 받고 하기위해선
서로 통신이 필요하단건 다들 아실거고
통신할 때 이런식으로 해라!
라고 만들어둔 규칙이라는 것이다.
CS 지식이 없을땐 그냥 메일작성하고, 보내고, 받고
만 할줄 알았는데 이제는 어떻게 보내지고 받아지는지 를 이해할 필요가 있다
과정을 간략하게 설명하면
- 사람들이 Naver 나 Google 에서 메일을 작성 , 그리고 전송버튼을 누름
- 이때 Naver 나 Google 이 이메일 클라이언트가 되는거임
- 이메일 클라이언트가 SMTP서버에 연결
- SMTP서버 : SMTP 가 프로토콜인건 알았죠? 그럼 이 프로토콜로 요청을 보내면 그걸 처리하는 서버가 있어야겠죠? 그게 SMTP 서버입니다
- SMTP 서버가 수신자의 메일서버로 메일 전달
- 수신자 메일서버가 전달받은 메일을 저장
- 수신자가 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를 편하게 쓸수있게 해주고있음
- 물론 공짜로 쓰려면 횟수제한이 있지만 추후에 AWS 에 SES 같은 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 |