DRF로 api 서버 개발(5) - email

Dongwon Ahn·2020년 7월 27일
4

DRF로 API Server 개발

목록 보기
6/8
post-thumbnail

Fit-ple에서는 팀 매칭 서비스이기 때문에 팀생성자와 지원자의 연결점이 필요했었습니다.
여러 방법을 생각해보다가 이메일을 통해 지원자 알림 및 공지 등 이메일 전송으로 팀원과의 초기 소통을 할 수 있게 해보자 라는 의견이 있어 이메일 전송을 해봤습니다.
이번 포스트에서는 장고에서 이메일 전송을 하는 법에 대해 알아보겠습니다.

Gmail SMTP 설정

다른 여러 메일도 해당 기능이 있지만 전 제가 했던 gmail을 통해진행하겠습니다.

아래 설정을 하게 되면 보안의 이슈가 있기 때문에 개인 메일보다는 테스트용 메일을 생성 후에 작업하는걸 추천합니다.

위의 설정을 하게 되면 이제 SMTP 서버를 활용할 수 있습니다.

Django 설정

설정을 하기 전에 보안을 위해 env 디렉토리를 생성하고 email.txt 파일을 생성합니다. (아래 이미지 처럼 진행하면 됩니다.)

해당 코드를 github에 올릴 경우 .gitignore에 추가해줘야 합니다.

그 후 email.txt에 email과 password를 작성합니다. 아래 처럼 작성하면 됩니다. (아래는 제가 임의로 작성한 email과 password입니다.)

emailtest@gmail.com
passwordtest

그 후 메인 프로젝트의 settings.py에 아래 내용을 추가하면 이메일 설정이 완료됩니다.

# Sending Email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
with open('env/email.txt') as email:
    EMAIL_HOST_USER = email.readline().strip()
    EMAIL_HOST_PASSWORD = email.readline().strip()

Django-email 설정에 관해서는 공식문서를 참고하시면 됩니다.

email 전송

이메일 전송 및 추후 api 테스트를 해볼 app을 생성하겠습니다.

python manage.py startapp testapi

settings의 INSTALLED_APPS에 testapi를 추가하겠습니다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 아래부터 추가된 부분
    'rest_framework',
    'accounts',
    'boards',
    'testapi',
]

teatapi/views.py에 아래 email 전송 코드를 작성

from django.core.mail.message import EmailMessage
from api_server import settings
from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny

FROM_EMAIL = settings.EMAIL_HOST_USER


@api_view(['GET'])
@permission_classes([AllowAny])
def send_test_email(requset):
    subject = "이메일 테스트2"
    to = ['lemontech119@gmail.com']
    message = "email test가 성공했습니다."
    EmailMessage(subject=subject, body=message, to=to, from_email=FROM_EMAIL).send()

    return Response({"message": "ok"})

메일 전송이 되는가를 확인하는 코드이기 때문에 간단하게 작성했습니다.

tesapi/urls.py 작성
urls.py 생성 후 아래 코드를 작성합니다.

from django.urls import path

from . import views


urlpatterns = [
    path('email/', views.send_test_email),
]

email 전송 Test


위의 이미지 처럼 test를 진행할 경우 아래 이미지 처럼 메일이 전송된 것을 볼 수 있습니다.

다만 이런 방식은 api 시간이 오래 걸리는 문제점이 있습니다.
해당 test도 5초가 소모되었습니다.
다음 포스트에서는 이 문제점을 해결하는 여러가지 방법이 있겠지만
Fit-ple 프로젝트에서 진행한 방법에 대해 작성하겠습니다.

profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.

0개의 댓글