Python/Django

[Django] 간단한 메일 전송 기능 구현 (by. Gmail )

yubi5050 2022. 11. 18. 16:38

1. Google 계정 보안 설정하기

(1) 구글 계정 - 보안  접속

(2) 2단계 인증 설정

(3) 앱 비밀번호 생성

 

구글 뿐만 아니라 네이버로 전송시에도 다음과 같이 앱 비밀번호를 생성하는 절차를 거쳐야 한다.

 

 

2. settings.py

메일 전송에는 SMTP Protocol이 활용되고, django에 내장된 mail 기능을 사용

# gmail
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = <your google email - ex.asdf@gmail.com>
EMAIL_HOST_PASSWORD ='<your app password>' # gmail 2단계 보안 인증 - 앱 비밀번호임! 
EMAIL_PORT = 587 # gmail SMTP 포트 
EMAIL_USE_TLS = True # TLS Setting
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

 

 

3. views.py

from django.core.mail import send_mail
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status

class mailView(APIView):
    def get(self, request):
        send_mail('메일 제목입니당.', '메일 메시지 입니당', <your send email>, ['<수신 email>'], fail_silently=False)
        return Response({'detail': '메일 전송완료'}, status=status.HTTP_200_OK)

 

4. urls.py

from django.urls import path
from .views import mailView

urlpatterns = [
    path('mail/', mailView.as_view())
]

 

5. Postman API 결과

전송 Endpoint

$ http://127.0.0.1:8001/mail

 

Response 응답 결과

{
    "detail": "메일 전송완료"
}

 

6. 결론

해당 코드는 Synchronized 한 코드라 향후 Asynchronized 한 코드로 변경이 필요함 (메일 전송이 완료될 때 까지 기다림)

 

다음 개선 목표 사항

  • Celery 와 같은 비동기 Task 큐로 활용 가능
  • AWS SES 기반 구현