Django Gmail 발송 예제 (2023년 버전)

Page content

개요

  • 최근 django 강의를 진행하면서, Gmail로 이메일을 발송 하는 예제에서 인증 코드 진행하는 부분이 오래된 것을 확인
  • 업그레이드 된 버전을 소개한다.

가상환경 및 django 라이브러리 설치

  • 먼저 빈 폴더를 생성 후, 가상환경을 생성한다.
  • (옵션) virtualenv 라이브러리 미 설치 시
$ pip install virtualenv
  • 기 설치가 되어 있다면 아래 코드를 순차적으로 실행한다.
$ virtualenv venv
$ source venv/Scripts/activate
  • 가상환경에 접속해 있다면 django를 설치 한다.
$ pip install django

장고 프로젝트 및 앱 설치

  • 이제 장고 프로젝트를 설정한다.
$ django-admin startproject djangogmail
  • 이제 해당 프로젝트 폴더에서 1개의 app을 만들어준다.
$ cd djangogmail/
$ python manage.py startapp main
  • 앱을 등록해준다.
    • 파일 경로 : djangogmail > djangogmail > settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "main"
]
  • runserver를 실행하여 장고 기본 화면이 나오는지 확인한다.
$ python manage.py runserver

Untitled

구글에서 인증키 발급

  • 인증키 발급은 다음과 같이 진행한다.
  • 구글 개인 프로필에서 Google 계정 관리를 클릭한다.

Untitled

  • 화면 왼쪽에서 보안을 클릭한다.

Untitled

  • Google에 로그인하는 방법 탭에서 2단계 인증을 클릭한다.

Untitled

  • 하단 스크롤바를 내리면 앱 비밀번호 탭을 클릭한다.

Untitled

  • 앱 비밀번호 생성할 앱 및 기기 선택 시, 기타(맞춤 이름)을 클릭한다.

Untitled

  • 적절한 이름을 작성 후 생성 버튼을 클릭한다.

Untitled

  • 16자리 비밀번호를 복사한다. (잊어버리면 다시 설정해야 함을 기억한다.)

Untitled

Email 설정 세팅

  • djangogmail > djangogmail > settings.py 에서 아래와 같이 코드를 추가한다.
# Email Settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'your_email'
EMAIL_HOST_PASSWORD = 'mvxs~'

프로젝트 urls.py 설정

  • djangogmail > djangogmail > urls.py 에서 아래와 같이 경로를 지정한다.
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path('', include('main.urls'))
]

앱 main 폴더 설정

Templates

  • index.html 파일을 아래와 같이 설정한다.
  • 파일 경로 : djangogmail > main > templates > main > index.html
<!DOCTYPE html>
<html lang="ko">
<head>
    <title>Gmail using Django</title>
</head>
<body>
    <div style="text-align:center;">
        <h4> 연락 정보 </h4>
        <form method="POST" action="{% url 'index' %}">
            {% csrf_token %}
            <input type="text" name="name" placeholder="이메일 제목" required>
            <br>
            <br>
            <input type="email" name="email" placeholder="이메일 주소" required>
            <br>
            <br>
            <textarea name="message" placeholder="메시지 입력" required></textarea>
            <button type="submit">전송</button>
        </form>
    </div>
</body>
</html>

urls.py 설정

  • 코드는 다음과 같다.
    • 이 때, name='index' 는 html 태그의 action 속성에 있는 index를 의미한다.
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

views.py 설정

  • 메일 보내기 기능을 하는 index 함수를 작성한다.
from django.shortcuts import render
from django.http import HttpResponse

from django.core.mail import send_mail
from django.conf import settings

# Create your views here.
def index(request, ):
    if request.method == "POST":
        message = request.POST['message']
        email = request.POST['email']
        name = request.POST['name']
        send_mail(
            name, 
            message, # 메시지
            'settings.EMAIL_HOST_USER', 
            [email]
        )
    return render(request, 'main/index.html')

테스트

  • python manage.py runserver를 실행 후, 아래와 같이 메일을 전송한다.

Untitled

  • 메일이 정상적으로 온 것을 확인할 수 있다.

Untitled