기술블로그-Django편
📬 Django 이메일 전송 및 보안 서명 처리
Chansman
2025. 5. 14. 15:24
📬 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회용 토큰 처리 등을 쉽게 구현할 수 있습니다!