Django로 이메일 보내는 방법: 완전한 SMTP 가이드

발행: (2025년 12월 12일 오전 05:00 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Django 이메일 시스템 이해하기

Django는 django.core.mail 모듈을 통해 강력한 이메일 전송 프레임워크를 제공합니다. 이 모듈에는 기본 텍스트, HTML, 대량 이메일을 보낼 수 있는 함수와 클래스가 포함되어 있습니다.

모듈이 제대로 작동하려면 백엔드가 필요하므로, 프로젝트에서 사용할 이메일 백엔드를 설정해야 합니다.

Django 이메일 시스템 개요

Django는 다양한 기본 제공 이메일 백엔드를 지원합니다. SMTP 백엔드가 가장 널리 사용되며 대부분의 애플리케이션에 잘 맞습니다.

기본 백엔드 외에도 사용자 정의 이메일 백엔드를 만들 수 있지만, 이 가이드는 내장된 SMTP 이메일 백엔드에 초점을 맞춥니다.

Django로 이메일 보내기

사전 준비 사항

  • 프로젝트에 Django가 설치되어 있어야 합니다 (이 가이드는 Django 5.0을 사용하지만 Django 3.x 이상에서도 동작합니다)
  • Django와 Python에 대한 기본 지식
  • 작동 중인 Django 프로젝트
    (프로젝트를 만들 필요가 있다면 공식 Django 설치 가이드를 참고하세요)
  • 이메일 서비스 제공자 (예시에서는 SendLayer를 사용하지만, 어떤 SMTP 제공자라도 작동합니다)

SendLayer를 선택한다면, 최대 200통의 이메일을 보낼 수 있는 무료 계정으로 시작할 수 있습니다.

SendLayer 무료 체험 시작하기

계정을 만든 후에는 보내는 도메인 인증을 해야 합니다. 이는 전달률을 높이고 계정을 검증하는 데 도움이 됩니다.

이메일 백엔드 설정하기

프로젝트의 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'

Django 이메일 설정 구성

SendLayer 계정(또는 사용 중인 다른 제공자)에서 SMTP 자격 증명을 가져와 위의 플레이스홀더를 교체합니다.

자격 증명 보안하기

사용자 이름과 비밀번호를 코드에 직접 저장하는 것은 보안에 취약합니다. 환경 변수를 사용하세요.

  1. 프로젝트 루트에 .env 파일을 생성합니다:

    EMAIL_HOST_USER='your-sendlayer-username'
    EMAIL_HOST_PASSWORD='your-sendlayer-password'
  2. python-decouple을 설치합니다:

    pip install python-decouple
  3. 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 콘텐츠 전송 등을 할 수 있습니다.

EmailMessage vs send_mail 함수

Back to Blog

관련 글

더 보기 »

Django: 6.0의 새로운 기능

2025-12-03 !https://adamj.eu/tech/assets/2025-12-03-django-mosaic.webp Django 6.0이 오늘 출시되었습니다 https://www.djangoproject.com/weblog/2025/dec/03/django-60-r...

Part 2: 첫 번째 Django 프로젝트 설정

이것은 “Learn Backend Development by Building a Social Media App” 시리즈의 파트 2입니다. 다시 오신 것을 환영합니다! 이전 파트에서는 백엔드가 실제로 무엇인지 배웠습니다.