[장고] 이메일 전송하기
웹 애플리케이션에서 이메일 전송은 사용자에게 중요한 정보를 전달하는 중요한 기능 중 하나입니다. 회원가입 확인, 비밀번호 재설정, 뉴스레터 등 다양한 상황에서 이메일 전송이 필요합니다. 장고(Django) 프레임워크는 이러한 이메일 전송을 손쉽게 구현할 수 있는 기능을 제공합니다. 이번 글에서는 장고를 사용해 이메일을 전송하는 방법에 대해 알아보겠습니다.
SMTP 이해하기
SMTP(Simple Mail Transfer Protocol)는 인터넷에서 이메일을 보내기 위한 규칙 집합입니다. 이 규칙에 따라 코드를 작성해야 보낸 사람이 받는 사람에게 이메일을 전달할 수 있습니다. SMTP 서버는 고유한 주소와 특정 포트를 통해 메시지를 전송합니다. 일반적으로 많이 사용하는 포트는 587번입니다. 우리는 Gmail의 SMTP 서버를 사용하여 이메일을 전송할 것입니다. Gmail SMTP 서버 주소는 smtp.gmail.com이며 포트는 587번입니다.
이메일 전송 구현
테스트 버전
이메일 전송을 로컬 서버에서 테스트할 수 있습니다. 로컬 서버에서는 실제 이메일을 전송하지 않고, 전송 결과를 콘솔 창이나 텍스트 파일로 보여줍니다. 여기서는 텍스트 파일로 저장하는 방법을 알아보겠습니다.
먼저 이메일 백엔드를 추가하고 저장할 위치를 지정합니다. settings.py 파일에 아래 코드를 추가합니다:
# settings.py
EMAIL_BACKEND = "django.core.mail.backends.filebased.EmailBackend"
EMAIL_FILE_PATH = BASE_DIR / "sent_emails"
이제 이메일을 전송해보겠습니다. 장고 셸을 열고 아래 코드를 실행합니다:
$ python3 manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail(
... 'Subject here',
... 'Here is the message.',
... 'from@example.com',
... ['to@example.com'],
... fail_silently=False,
... )
콘솔 창에 숫자 1이 출력되면 전송에 성공한 것입니다. 프로젝트 폴더 안의 sent_emails 폴더에 새로 생성된 텍스트 파일이 보일 것입니다.
배포 버전
실제 사용자에게 이메일을 보내려면 이메일 호스트 서버가 필요합니다. 우리는 Google의 SMTP 서버를 사용할 것입니다.
- 이메일 호스트 서버 설정
- 새로운 구글 계정을 만듭니다.
- 계정 설정에서 보안 페이지로 이동하여 2단계 인증을 등록합니다.
- 다시 보안 페이지로 돌아가서 "앱 비밀번호"를 생성합니다.
- 앱 이름을 입력하고 만들기 버튼을 클릭하면 12자리 앱 비밀번호가 생성됩니다.
장고 설정
settings.py 파일에 아래 값을 입력합니다:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = 'youremailID@gmail.com'
EMAIL_HOST_PASSWORD = 'your_app_password'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
여기서 EMAIL_HOST_PASSWORD는 구글 계정 비밀번호가 아니라 앱 비밀번호 설정에서 받은 12자리 비밀번호입니다. EMAIL_USE_TLS 대신 EMAIL_USE_SSL을 사용하려면 포트를 465로 설정해야 합니다.
뷰 정의
이제 뷰를 통해 이메일을 전송해보겠습니다. 다음은 이메일을 전송하는 간단한 뷰 코드입니다:
# views.py
from django.core.mail import send_mail
from django.conf import settings
from django.shortcuts import redirect
def email(request):
subject = 'Thank you for registering to our site'
message = 'It means a world to us'
email_from = settings.EMAIL_HOST_USER
recipient_list = ['receiver@gmail.com']
send_mail(subject, message, email_from, recipient_list)
return redirect('redirect to a new page')
위 코드는 send_mail 메서드를 호출하여 이메일을 전송합니다. subject는 이메일의 제목, message는 이메일의 본문, email_from은 발신자 이메일 주소, recipient_list는 수신자 이메일 주소 목록입니다.
결론
이번 글에서는 장고를 사용하여 이메일을 전송하는 방법에 대해 알아보았습니다. 로컬 서버에서 테스트하는 방법과 실제 사용자에게 이메일을 보내기 위해 Google SMTP 서버를 설정하는 방법을 살펴보았습니다. 장고의 이메일 기능을 활용하면 다양한 상황에서 쉽게 이메일을 전송할 수 있습니다. 이를 통해 사용자와의 소통을 강화하고, 웹 애플리케이션의 기능을 더욱 풍부하게 만들 수 있습니다.