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
구글에서 인증키 발급
- 인증키 발급은 다음과 같이 진행한다.
- 구글 개인 프로필에서 Google 계정 관리를 클릭한다.
- 화면 왼쪽에서
보안
을 클릭한다.
- Google에 로그인하는 방법 탭에서 2단계 인증을 클릭한다.
- 하단 스크롤바를 내리면 앱 비밀번호 탭을 클릭한다.
- 앱 비밀번호 생성할 앱 및 기기 선택 시, 기타(맞춤 이름)을 클릭한다.
- 적절한 이름을 작성 후 생성 버튼을 클릭한다.
- 16자리 비밀번호를 복사한다. (잊어버리면 다시 설정해야 함을 기억한다.)
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
를 실행 후, 아래와 같이 메일을 전송한다.
- 메일이 정상적으로 온 것을 확인할 수 있다.