장고:이메일app 만들기
장고! 웹 프레임워크! 틀:장고
개요
장고에서 사용자에게 이메일을 보낼 일이 있다. 이러한 기능들을 한번에 관리하기 위한 앱.
과정
앱 생성
앱을 생성하고..
urls.py수정
앱의 url경로를 추가한다.
path('Email/', include('Email.urls'))
앱의 urls.py 작성
app_name = 'email'
from . import views
urlpatterns = [
path('send/', views.sendEmail, name='send')]
settings.py 수정
이메일을 보내기 위한 smtp 서버를 설정해주어야 한다. 없는 내용이니 다음과 같이, 이용하려는 서비스에 따라 추가해 준다.
# Email settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 465 # 장고 한그릇 뚝딱에선 587이라 기입되어 있다.
EMAIL_HOST_USER = '각자 이메일'
EMAIL_HOST_PASSWORD = '각자 암호'
위를 설정했다면 나머지를 짜기 전에 테스트를 해보자.
파이썬 콘솔로 접속하여.. python manage.py shell
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('title', 'content', to=['[email protected]'])
>>> email.send()
위 형태로 보내보면 메일이 간다. 이걸 확인했다면 settings.py 설정은 완료.
view 작성
사전작업
구글이든 어떤 서비스에서든 계정>보안
탭에서 앱의 엑세스를 허용한다.
view 작성
장고의 기능을 사용하면 우리가 해왔던 것들처럼 탬플릿을 사용할 수 있다.
딱히 메일서버를 연동시키는 일도 없이 좋다.
from django.core.mail import EmailMessage # 이메일을 보내는 모듈. 파이썬에선 smtplib를 사용하지만, 장고 자체의 기능이 더 편리하다.
from django.template.loader import render_to_string # 템플릿을 렌더링하기 위한 기능.
def verification(request):
if request.method == "POST":
pass
content = {'user' : request.user}
msg_html = render_to_string('verification.html', content)
msg = EmailMessage(subject="이메일 인증",
body=msg_html,
to=[request.user.email],
)
msg.content_subtype = 'html' # html 코드로 나타내기 위함.
msg.send()
messages.info(request, '이메일을 발송하였습니다~')
return redirect('성공 후 보낼 주소')
파이썬의 모듈을 이용한 복잡한 방식.
import smtplib # 이메일을 보내는 모듈
from email.mime.text import MIMEText # 메일 본문을 html로 나타내기 위해
from email.mime.multipart import MEMEMultipart # 메시지객체를 위해
def sendEmail(request):
# 어디로 보낼 것인가? 입력받은 데이터를 토대로.
receiver = request.POST['receiver']
###################사전정보 입력
# 보내는 사람 정보
sender = "[email protected]"
sender_password = "설정한 비밀번호"
# 메일서버로그인
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login(sender, sender_password)
# 메시지객체생성
msg = MIMEMultipart('alternative')
msg['Subject'] = "제목입력"
msg['From'] = sender
msg['To'] = receiver
msg.attach(content)
# 메일발송
server.sendmail(msg['From'], msg['To'], )
server.quit()
return redirect(....)