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는 해당 폴더가 파이썬 폴더임을 명시하는 것으로, 안 써도 무방합니다.)
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에서 불러와서 실행할 수 있습니다.
3) 메일 발송
제 이메일인 cwjcsk@naver.com으로 위 코드를 기반으로 메일을 발송해보겠습니다. 성공시 아무것도 출력되지 않습니다.
python manage.py send_mail cwjcsk@naver.com
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/
'Back-End > Django' 카테고리의 다른 글
[Django] 로그인, 로그아웃 간단 구현! (CBV) (0) | 2022.08.10 |
---|---|
[Django] django command로 메일 보내기2 (HTML Template 활용) (0) | 2022.08.09 |
[Django] 템플릿 시스템에 bootstrap5 간단하게 적용해보기 (2) | 2022.08.08 |
[Django] .env(dotenv)파일 기초 사용법 (feat. naver smtp 메일 보내기) (0) | 2022.08.08 |
[Django] User 모델 및 admin 커스텀하기 (0) | 2022.08.07 |