Technique

카카오톡 플러스친구를 이용한 email 간편 전송 서비스 만들기(feat, DJANGO, groomide) 5

JAY-GO 2018. 9. 10. 22:51
반응형

 이번 포스팅에서는 앞에서 만든 django 서비스를 발전시켜 플러스친구에서 '전송' 이라는 단어가 입력되면 정해진 이메일 주소로 지금까지 플러스친구를 통해 전송된 메시지들을 이메일로 만들어 발송하는 서비스를 구현 해보겠습니다. 서비스 정의는 아래와 같이 동작 합니다.


 플러스친구에서 전송한 메시지를 django 서버에 사용자 별로 저장 하였다가 '전송'이라는 메시지가 입력되면 gmail smtp 서버를 이용하여 django 서버에 미리 등록해둔 email 주소들로 전송한다.


 django 에서 이메일을 전송하는 방법은 여러가지가 있겠지만, 간단한 설정만으로 사용 가능한 gmail을 연동하여 사용 해보도록 하겠습니다.


 1. 구글 Gmail SMTP 서버 사용 설정

 Gmail 에서는 간단한 인증설정을 통해 외부에서 SMTP 서버를 이용할 수 있게 해주며 django는 이를 간단하게 이용할 수 있는 패키지를 제공 합니다.


이를 위해서는 우선 Gmail 계정이 필요하고, IMAP 액세스 사용 및 계정 액세스 권한 조정이 필요 합니다.

 ㅇ IMAP 액세스 사용

   - 설정 -> 전달 및 POP/IMAP -> IMAP 액세스 -> 상태 : IMAP 사용

 ㅇ 계정 액세스 권한 조정

   - Google 계정 -> 로그인 및 보안 ->계정 액세스 권한을 가진 앱 -> 

보안 수준이 낮은 앱 허용: 사용



2. django smtp 사용 준비

 django 에서 smtp 서버를 이용하여 이메일을 보내려면 setting.py에 관련 설정을 셋팅해야 합니다.


<myserver/settings.py>

# EMAIL setting
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = 'your-id@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

사용하고자 하는 gmail 계정과 비밀번호를 포함하여 위 설정을 settings.py 에 추가 합니다.


<sendemail/views.py>

from django.core.mail import EmailMessage

 view에 django 에서 제공하는 EmailMessage가 settings.py에 설정한 email 관련 설정을 이용하여 gmail smtp 서버를 이용할 것입니다.


3. 서비스에 활용할 django 모델 구성

 ㅇ 모델 정의

    - 전송대상 email 주소 모델 : mail_list

    - 플러스친구로 입력된 메시지 모델 : message_list

<sendemail/models.py>

from django.db import models
from django.contrib.auth.models import User
# Create your models here.


class mail_list(models.Model):
name = models.CharField(max_length=20)
email = models.EmailField()

def __str__(self):
display_text = "name : " + self.name + "<E-mail:" + self.email + ">"
return display_text


class message_list(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content_text = models.TextField(blank=True)
content_img = models.URLField(blank=True)
emailed = models.BooleanField(default=False)

def __str__(self):
display_text = "name : " + self.user.username + " | " \
+ self.content_text + self.content_img
return display_text

 ㅇ INSTALLED_APP 설정

 마이그래이션 전에 생성된 앱을 settings.py에 INSTALLED_APP에 추가 하여야 합니다. 하지 않을경우 마이그래이션 되지 않습니다. 처음 django 앱을 생성하고 바로 입력하는 것이 덜 해깔릴 것입니다.

<myserver/settings.py>

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sendemail'
]

 ㅇ 마이그래이션

<migrations>

python3 manage.py makemigrations
python3 manage.py migrate

 ㅇ admin 페이지에 생성한 모델 포함

 admin 페이지를 통하여 email 주소 입력 및 db관리가 가능하도록 사용합니다.

<sendemail/admin.py>

from django.contrib import admin
from .models import mail_list, message_list

# Register your models here.

admin.site.register(mail_list)
admin.site.register(message_list)

 ㅇ superuser 생성

 admin 페이지 접속을 위한 관리자 개정을 생성합니다.

python3 manage.py createsuperuser

 ㅇ admin 페이지 확인

 지금까지의 설정이 정상적으로 되었는지 서버를 기동하여 admin 페이지에 접속해 봅시다. goormide 터미널로 아래 명령을 실행시켜 테스트 서버를 기동하고 프로젝트 - 실행 URL과 포트 의 ULR 주소의 /admin 페이지에 접속하여 생성한 관리자 계정으로 접속 합니다.

python3 manage.py runserver 0.0.0.0:80

 앞에서 생성한 모델들이 정상적으로 admin 페이지에 나타 납니다.


다음 페이지에서는 지금까지 생성한 모델을 바탕으로 우리가 정의한 서비스가 동작하도록 view를 구성해 보도록 하겠습니다.


반응형