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-decouplesettings.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 콘텐츠 전송 등을 할 수 있습니다.
