1. 배경
지난 포스팅에서 django command를 이용해 메일을 보내봤습니다. ([Django] django command로 메일 보내기 기초 사용법(feat. naver mail))
이번엔 HTML 템플릿을 활용해 보겠습니다. HTML에 예쁘게 메일을 작성하고, 제목, 내용만 django의 문자열 값을 받아서 rendering하여 메일을 발송해보겠습니다.
2. 해결
1) html template 찾기 및 저장
구글에서 무료 메일 html template을 검색해서 아래 템플릿을 찾았습니다. (github link: https://github.com/ColorlibHQ/email-templates/tree/master/10)
깃허브에서 해당 index.html을 복사하여 blog 하위의 mail_template.html에 저장하였습니다. 그리고 이미지 부문을 웹의 무료 gif를 찾아 넣었습니다.
2) Command 코드 작성
from typing import List
from django.conf import settings
from django.core.mail import send_mail
from django.core.management import BaseCommand, CommandError
from django.core.validators import validate_email
from django.template.loader import render_to_string
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("receiver", nargs="+", type=str, help="이메일 수신 주소")
def handle(self, *args, **options):
subject = "세계 일주 여행 당첨"
content = "호갱님을 세계 일주에 초대합니다!"
sender_email = settings.DEFAULT_FROM_EMAIL
receiver_email_list: List[str] = options["receiver"]
try:
for email in receiver_email_list:
validate_email(email)
except ValueError as e:
raise CommandError(e.message)
context = {
"subject": subject,
"content": content,
}
html_mail = render_to_string("blog/mail_template.html", context)
send_mail(
subject, content, sender_email, receiver_email_list, html_message=html_mail
)
* 코드 설명
지난번 포스팅과 코드 대부분이 일치합니다. ([Django] django command로 메일 보내기 기초 사용법(feat. naver mail))
바뀐 부분은 try except로 email이 validate한지 판단하는 부분이 있습니다. 그리고 핵심적으로 render_to_string() 메소드를 통해 mail_template의 경로를 넣어주고, context 파라미터에 subject와 content를 추가해줍니다. 그리고 send_mail()할 때, html_message 파라미터에 html_mail을 넣어주면 html 템플릿에 context가 전달되어 메일이 발송됩니다.
3) 메일 발송
이번엔 제 gmail에 메일을 발송해보겠습니다.
python manage.py send_mail <메일 주소>
4) 결과 화면
메일 템플릿을 HTML로만 봤을 때는 예뻤는데, 메일로 막상 보내니, 디자인이 다 적용되지 않았습니다. 그래도 이정도면 괜찮습니다.
Reference
1. django Logo: https://codecondo.com/jobs-for-django-developers/django-framework-logo/
2. Content: 인프런 장고 강의 https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%EC%84%A4%EA%B3%84%EC%B2%A0%ED%95%99-%EC%9E%85%EB%AC%B8/
'Back-End > Django' 카테고리의 다른 글
[Django] login_required 3가지 구현 방법 (AOP, Decorator) (0) | 2022.08.10 |
---|---|
[Django] 로그인, 로그아웃 간단 구현! (CBV) (0) | 2022.08.10 |
[Django] django command로 메일 보내기 기초 사용법(feat. naver mail) (0) | 2022.08.09 |
[Django] 템플릿 시스템에 bootstrap5 간단하게 적용해보기 (2) | 2022.08.08 |
[Django] .env(dotenv)파일 기초 사용법 (feat. naver smtp 메일 보내기) (0) | 2022.08.08 |