장고:이메일app 만들기
장고! 웹 프레임워크! 틀:장고
개요
장고에서 사용자에게 이메일을 보낼 일이 있다. 이러한 기능들을 한번에 관리하기 위한 앱.
제공자에 따른 서버명, 포트
메일 Provider | SMTP 서버명 | 포트 | 사전준비 |
---|---|---|---|
Gmail | smtp.gmail.com | 587 | 구글에서 앱 비밀번호까지 얻자. 링크 |
Naver | smtp.naver.com | 587 | |
Live | smtp.live.com | 587 | |
Daum | smtp.daum.net | 465 | |
nate.com | smtp.mail.nate.com | 465 | |
outlook.com | smtp.outlook.com | 587 |
과정
앱 생성
앱을 생성하고..
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('성공 후 보낼 주소')
관련에러
SMTPServerDisconnected
설정에서 무언가 잘못되어 연결 자체가 되지 않은 경우. 포트번호가 다르거나 할 때 나온다.
SMTPAuthenticationError
비밀번호 등의 설정이 잘못된 경우. 보통 Gmail을 사용할 때 발생하는데, Gmail에선 어플리케이션 비밀번호를 따로 관리한다. 위의 서비스별 안내를 참고해 진행해보자.