[Django] django command로 메일 보내기2 (HTML Template 활용)

반응형

django Logo

 

 
Contents

    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)

    HTML Mail template

    깃허브에서 해당 index.html을 복사하여 blog 하위의 mail_template.html에 저장하였습니다. 그리고 이미지 부문을 웹의 무료 gif를 찾아 넣었습니다.

    mail_template.html 폴더 구조

     

    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로만 봤을 때는 예뻤는데, 메일로 막상 보내니, 디자인이 다 적용되지 않았습니다. 그래도 이정도면 괜찮습니다.

    GIF 처리된 Mail Template

     

    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/
    반응형

    댓글

    Designed by JB FACTORY