본문 바로가기

Python/Django

[Django] SMTP 이메일 보내기

728x90

이메일 인증은 유저의 이메일이 유효한지를 검사하는 경우 또는 유저를 인증하는 경우에 많이 사용됩니다.  SMTP는 Simple Mail Transfer Protocol의 약자로 메일 전송을 위한 표준 프로토콜입니다.  SMTP를 사용하여 메일을 보내는 법을 알아보겠습니다. 다음은 settings.py 코드입니다.

 

...
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_POST = '587'
EMAIL_HOST_USER = 'your-email@gmail.com'
EMAIL_HOST_PASSWORD = 'your-password'
EMAIL_USE_TLS = True
...

 

  • EMAIL_HOST: 메일을 호스트 하는 서버입니다.
  • EMAIL_PORT: HOST와 통신하는 포트번호입니다.
  • EMAIL_HOST_USER: 발신할 이메일입니다.
  • EMAIL_HOST_PASSWORD: 발신할 이메일의 비밀번호입니다.
  • EMAIL_USE_TLS: TLS 보안 설정 여부입니다.

EMAIL_HOST, EMAIL_PORT, EMAIL_USE_TLS는 거의 바뀌지 않으므로 EMAIL_HOST_USER, EMAIL_HOST_PASSWORD만 설명에 맞게 수정해주면 됩니다. 다음은 views.py입니다.

 

from django.core.mail import EmailMessage
from django.template.loader import render_to_string

mail_subject = 'smtp를 사용하여 이메일 보내기'
message = render_to_string('smtp_email.html', {
    'name': 'chungchung'
	})
    to_email = '보내고 싶은 이메일 주소'
    send_email = EmailMessage(mail_subject, message, to=[to_email])
    send_email.send()

 

메일을 보내기 위해서는 EmailMessage와 render_to_string을 사용합니다. EmailMessage는 메일 제목, 내용, 수신자 이메일을 입력받아 이메일을 발신하기 위해 사용되고, render_to_string은 template 객체를 반환함과 동시에 render를 진행해주어 이메일 구조에 내용을 넣어주는 기능을 위해 사용됩니다. 다음은 templates 코드입니다.

 

<!-- smtp_email.html -->
{% autoescape off %}

안녕하세요! {{ name }}님
smtp를 사용하여 이메일을 발송하였습니다.
{{ name }}님이 요청한게 아니라면 이메일을 무시해주시기 바랍니다.

{% endautoescape %}

 

메일의 내용 부분이 될 smtp_email.html 코드입니다. views.py에서 render_to_string 실행 시 넘겨준 context를 위의 템플릿에 맞게 정보가 들어가게 됩니다. {% autoescape off %}를 사용하여 html 코드가 rendering 되어 보일 수 있게 해 줍니다.

 

728x90