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 기반 구현
'Python > Django' 카테고리의 다른 글
[Django] Prefetch 에 대한 이해 (0) | 2024.05.19 |
---|---|
[Django] Django Model - Table Field, Relationship (1) | 2023.02.07 |
[Django] Pagination 방법 비교 (Feat. Django, DRF) (0) | 2022.11.10 |
[Django] Django Pagination (by. Django Paginator) (0) | 2022.11.10 |
[Django] Request 구조 분석 (with. DRF, Query-String vs Path-variables) (0) | 2022.08.22 |