📬 Django 이메일 전송 및 보안 서명 처리

2025. 5. 14. 15:24·기술블로그-Django편

📬 Django 이메일 전송 및 보안 서명 처리

1️⃣ django.core.mail.send_mail

Django에서는 send_mail() 함수를 통해 간편하게 이메일을 보낼 수 있습니다.

✅ 기본 사용법

from django.core.mail import send_mail

send_mail(
    subject='회원가입 인증',
    message='이메일 본문 내용입니다.',
    from_email='admin@example.com',
    recipient_list=['user@example.com'],
    fail_silently=False,
)

파라미터 설명

subject 이메일 제목
message 본문 내용 (일반 텍스트)
from_email 발신자 이메일
recipient_list 수신자 리스트 (여러 개 가능)
fail_silently True이면 오류 발생 시 무시

💡 설정 예시 (settings.py)

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'youremail@gmail.com'
EMAIL_HOST_PASSWORD = 'yourpassword'

2️⃣ django.core.signing

데이터를 안전하게 서명하거나 검증할 수 있게 해주는 Django의 내장 보안 기능입니다.

from django.core import signing

# 서명된 문자열 생성
signed_data = signing.sign('user@example.com')

# 원래 데이터 복원
original = signing.unsign(signed_data)

📌 sign()과 unsign()은 기본적인 서명/검증 기능 제공

  • 위변조 방지에 효과적
  • 인증 링크, 비밀번호 재설정 등에 유용

3️⃣ TimestampSigner

signing.TimestampSigner는 서명에 유효 시간 제한을 둘 수 있습니다.

from django.core.signing import TimestampSigner, BadSignature, SignatureExpired
import time

signer = TimestampSigner()

# 서명된 문자열 생성
signed_value = signer.sign('user@example.com')

# 서명 해제 (정상)
try:
    original = signer.unsign(signed_value, max_age=60)  # 60초 제한
except SignatureExpired:
    print("링크 만료")
except BadSignature:
    print("위조된 링크")

✅ 활용 예시

  • 이메일 인증 링크에 서명 값 포함
  • 일정 시간 후 링크 만료 처리

✅ 요약 정리

항목 설명

send_mail() 이메일 전송 (SMTP 기반)
sign() / unsign() 문자열 서명/검증 처리
TimestampSigner 유효 기간이 있는 서명 처리
SignatureExpired 서명 만료 예외
BadSignature 위조 시도 예외

📌 이 기능들을 활용하면 안전한 이메일 인증, 비밀번호 재설정, 1회용 토큰 처리 등을 쉽게 구현할 수 있습니다!

'기술블로그-Django편' 카테고리의 다른 글

✅ Django에서 User 모델을 참조하는 두 가지 방식 비교  (0) 2025.05.14
📂 Django 모델에서 str() 함수 작동 흐름 완벽 해설  (0) 2025.05.14
🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리  (0) 2025.05.14
👤 Django 사용자 인증 시스템 완전 정리  (0) 2025.05.14
🛠️ Django ORM 완벽 가이드  (0) 2025.05.14
'기술블로그-Django편' 카테고리의 다른 글
  • ✅ Django에서 User 모델을 참조하는 두 가지 방식 비교
  • 📂 Django 모델에서 str() 함수 작동 흐름 완벽 해설
  • 🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리
  • 👤 Django 사용자 인증 시스템 완전 정리
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (115) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lawsuitculture
    youngprofessionals
    smartphonedurability
    homebartrend
    btsreunion
    college reunions
    global politics
    americanlaw
    뷔
    classaction
    gpterror
    basalcellcarcinoma
    bts
    titaniumcase
    btsdischarge
    remittance
    btsjungkook
    btscomeback
    life reflection
    americaparty
    RM
    livebroadcast
    hotcoffeecase
    self-growth
    trumpmuskclash
    urbantrends
    chatgpterror
    travel ban
    newpoliticalparty
    chinanightlife
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📬 Django 이메일 전송 및 보안 서명 처리
상단으로

티스토리툴바