[Django] django command로 메일 보내기 기초 사용법(feat. naver mail)

반응형

django Logo

 

Contents

    1. 배경

    django에서는 commands 인터페이스를 제공해 줍니다. 이전 시간에 .env를 이용해 중요한 사항들을 따로 정리하는 방법을 알아보았습니다. (링크: [Django] .env(dotenv)파일 기초 사용법 (feat. naver smtp 메일 보내기)) 이를 바탕으로 Django에서 커맨드를 생성하고, 메일을 보내보는 실습을 해보겠습니다.

    2. 해결

    1) blog앱 내부에 managements/commands 디렉토리 생성

    commands 폴더 내부에 command로 쓰고자 하는 명령어로 python 파일을 만들면 됩니다. 저는 send_mail이라는 명령어를 사용할 것이기 때문에, send_mail.py를 만들었습니다. (__init__.py는 해당 폴더가 파이썬 폴더임을 명시하는 것으로, 안 써도 무방합니다.)

    command 디렉토리 위치

     

    2) Command 클래스 생성

    from typing import List
    from django.conf import settings
    from django.core.mail import send_mail
    from django.core.management import BaseCommand
    
    
    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"]
            send_mail(subject, content, sender_email, receiver_email_list)

    * 코드 해석

    장고의 BaseCommand를 상속받아 Command라는 클래스를 생성하였습니다. 2가지 메소드를 오버라이드 하여 작성하겠습니다. 첫 번째는 add_argument라는 메소드를 오버라이드 합니다. 이는 명령어 실행 시 인자를 받을 수 있게 해 주는 메소드 입니다. 두 번째로는 handle이라는 메소드를 오버라이드 합니다. 이게 핵심 메소드로, Command 실행 시 실행되는 메소드입니다. add_argument로 받은 인자를 options에 저장하기 때문에, options에서 불러와서 실행할 수 있습니다.

    Command 클래스

     

    3) 메일 발송

    제 이메일인 cwjcsk@naver.com으로 위 코드를 기반으로 메일을 발송해보겠습니다. 성공시 아무것도 출력되지 않습니다.

    python manage.py send_mail cwjcsk@naver.com

    send_mail 커맨드 실행

     

    4) 결과 화면

    네이버 메일에 들어가보면, 보낸 메일함과 받은 메일함 모두에서 확인됩니다. 보낼 때도 제 메일인 cwjcsk@naver.com으로 설정했기 때문입니다.

    결과 화면

     

     

    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