Django로 이메일 보내는 방법: 완전한 SMTP 가이드
Source: Dev.to
Django 이메일 시스템 이해하기
Django는 django.core.mail 모듈을 통해 강력한 이메일 전송 프레임워크를 제공합니다. 이 모듈에는 기본 텍스트, HTML, 대량 이메일을 보낼 수 있는 함수와 클래스가 포함되어 있습니다.
모듈이 제대로 작동하려면 백엔드가 필요하므로, 프로젝트에서 사용할 이메일 백엔드를 설정해야 합니다.

Django는 다양한 기본 제공 이메일 백엔드를 지원합니다. SMTP 백엔드가 가장 널리 사용되며 대부분의 애플리케이션에 잘 맞습니다.
기본 백엔드 외에도 사용자 정의 이메일 백엔드를 만들 수 있지만, 이 가이드는 내장된 SMTP 이메일 백엔드에 초점을 맞춥니다.
Django로 이메일 보내기
사전 준비 사항
- 프로젝트에 Django가 설치되어 있어야 합니다 (이 가이드는 Django 5.0을 사용하지만 Django 3.x 이상에서도 동작합니다)
- Django와 Python에 대한 기본 지식
- 작동 중인 Django 프로젝트
(프로젝트를 만들 필요가 있다면 공식 Django 설치 가이드를 참고하세요) - 이메일 서비스 제공자 (예시에서는 SendLayer를 사용하지만, 어떤 SMTP 제공자라도 작동합니다)
SendLayer를 선택한다면, 최대 200통의 이메일을 보낼 수 있는 무료 계정으로 시작할 수 있습니다.
계정을 만든 후에는 보내는 도메인 인증을 해야 합니다. 이는 전달률을 높이고 계정을 검증하는 데 도움이 됩니다.
이메일 백엔드 설정하기
프로젝트의 settings.py 파일을 열고 다음 설정을 추가합니다 (플레이스홀더 값을 자신의 SMTP 자격 증명으로 교체하세요):
# Django 이메일 설정
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sendlayer.net' # 자신의 SMTP 서버로 교체
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-sendlayer-username'
EMAIL_HOST_PASSWORD = 'your-sendlayer-password'

SendLayer 계정(또는 사용 중인 다른 제공자)에서 SMTP 자격 증명을 가져와 위의 플레이스홀더를 교체합니다.
자격 증명 보안하기
사용자 이름과 비밀번호를 코드에 직접 저장하는 것은 보안에 취약합니다. 환경 변수를 사용하세요.
-
프로젝트 루트에
.env파일을 생성합니다:EMAIL_HOST_USER='your-sendlayer-username' EMAIL_HOST_PASSWORD='your-sendlayer-password' -
python-decouple을 설치합니다:pip install python-decouple -
settings.py를 수정해 변수를 읽어오게 합니다:from decouple import config EMAIL_HOST_USER = config('EMAIL_HOST_USER') EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')
방법 1: send_mail() 함수로 일반 텍스트 이메일 보내기
send_mail()은 간단한 텍스트 이메일을 보내기 위한 내장 단축키 함수입니다.
필수 매개변수
subject: 이메일 제목message: 순수 텍스트 본문from_email: 발신자 주소recipient_list: 수신자 주소 리스트
선택 매개변수
fail_silently:False이면 예외가 발생하고,True이면 예외가 억제됩니다connection: 사용자 정의 이메일 백엔드 (설정에 정의된 기본값 사용)html_message: HTML 형식의 이메일 본문
예시
from django.core.mail import send_mail
send_mail(
subject='Welcome to Our App',
message='Thank you for signing up!',
from_email='paulie@example.com',
recipient_list=['user@example.com'],
fail_silently=False,
)
프로 팁: SendLayer를 사용할 경우
from_email은 인증한 도메인에 속해야 합니다(예:@example.com).
여러 수신자에게 보내기
from django.core.mail import send_mail
send_mail(
subject='Welcome to Our App',
message='Thank you for signing up!',
from_email='paulie@example.com',
recipient_list=[
'user1@example.com',
'user2@example.com',
'user3@example.com',
],
fail_silently=False,
)
방법 2: EmailMessage 클래스로 이메일 보내기
EmailMessage 클래스는 send_mail()보다 유연성이 높아 첨부 파일 추가, 커스텀 헤더 설정, HTML 콘텐츠 전송 등을 할 수 있습니다.
