들어가기

현재 Pet Garden 서비스 중 비밀번호 찾기에서를 사용자의 메일로 보내서 비밀번호 변경을 처리하려고 한다. Django 에서 메일을 전송하기 위해 먼저 SMTP 서버 에 대해 알아보고 정리하였다

개인이나 기업이 SMTP 서버를 설치해서 이를 통해 메일을 발송할 수 있다. 하지만 요즘은 구글, 마이크로소프트 등의 기업에서 SMTP 서버를 오픈하기 때문에 이를 통해 메일을 전송할 수 있다

이 중에 GMail의 SMTP 서버를 이용하여 메일을 전송해보자

GMail SMTP 서버

GMail의 SMTP 서버를 이용하기 위해서는 두 가지 설정을 해줘야한다

두 가지 설정이 마치게 되면 SMTP 서버를 이용할 수 있다

다만 해당 계정의 비밀번호가 유출되지 않도록 잘 관리하자❗️

Django 설정

Django에서는 위의 첫번째 설정이 settings.py의 몇 줄의 코드로 설정된다

두번째 보안 수준이 낮은 앱 허용 을 하지 않으면 계정이 틀렸다고 나온다

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = 'username@gmail.com'
EMAIL_HOST_PASSWORD = 'your-gmail-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  • EMAIL_BACKEND : 메일을 전송에 쓰는 백엔드 설정 (장고에서는 위같이 설정하라고 나와있다)
  • EMAIL_PORT : 587 포트는 GMail의 권장 사항이다
  • EMAIL_USE_TLS : TLS(Transport Layer Security)는 통신 내용을 암호화하는 통신 규약이다. 일반적으로 587 포트에 적용한다고 한다

Django 에서 메일 송신

Django 에서는 Pythond의 내장 모듈인 stmplib 를 통해 메일을 발송한다

stmplib 로도 메일 전송을 할 수 있지만 Django에서는 좀 더 편하게 서비스를 제공한다

Basic 메일 전송

from django.core.mail import send_mail

send_mail(
    'Subject here',         # 제목
    'Here is the message.', # 내용
    'from@example.com',     # 보내는 이메일  (settings에 설정해서 작성안해도 됨)
    ['to@example.com'],     # 받는 이메일 리스트
    fail_silently=False,
)

EmailMessage 클래스

from django.core.mail import EmailMessage

email = EmailMessage(
    'Hello',                # 제목
    'Body goes here',       # 내용
    'from@example.com',     # 보내는 이메일 (settings에 설정해서 작성안해도 됨)
    to=['to1@example.com', 'to2@example.com'],  # 받는 이메일 리스트
)

이제 메일이 전송된다

❗️주의 : 비밀번호 노출을 조심해라 !!!