ㅁㄴㅇㄻㄴㅇㄹ

[Django ] Django TypeError: send_mail() missing 1 required positional argument: 'from_email' 본문

Django

[Django ] Django TypeError: send_mail() missing 1 required positional argument: 'from_email'

hanbin8269 2021. 5. 22. 16:04

Django로 이메일 전송을 구현하고 있는데 send_mail 함수에서 위와 같은 오류가 났다.

 

위 오류의 내용은 send_mail의 매개변수 from_email을 안 넘겨 줬다는 소리다.

from django.core.mail import send_mail


send_mail(
	subject="Activate your DoranDoran account.",
	message="Please Activate your account http://localhost:8000",
	recipient_list=[user_instance.user.email],
	fail_silently=False,
)

코드는 위와 같았는데, from_email 이 없다고 오류가 난다.

그런데 django.core.mail.send_mail 의 소스코드를 보면 아래와 같이 설명되어 있다.

If from_email is None, user the DEFAULT_FROM_EMAIL setting.

45번째 줄을 보면 from_email 이 None이면 DEFAULT_FROM_EMAIL을 사용한다고 되어있다. 하지만 같이 써있는 auth_user는 기본값 None이 있는 반면, from_email을 기본값이 설정되어 있지 않다. 그래서 적어주지 않으니 오류가 발생하는 것이다.

 

결국 해결방법은 from_email을 적어주면 된다.

from django.core.mail import send_mail


send_mail(
	subject="Activate your DoranDoran account.",
	message="Please Activate your account http://localhost:8000",
	from_email=None,
	recipient_list=[user_instance.user.email],
	fail_silently=False,
)

이렇게 하면 해결되긴 하지만 django 라이브러리에 일관성이 없다고 생각이 든다... PR 보내봐야 겠다.

 

========================================

 

PR 보내고 봤더니 이미 이전에 있었던 이슈였다.

https://code.djangoproject.com/ticket/32633#comment:3

 

#32633 (send_mail must make `from_email` argument optional) – Django

the django docs state that, while sending mail, if no from_email is passed, it will use the DEFAULT_FROM_EMAIL. source: ​https://docs.djangoproject.com/en/3.1/topics/email/ from_email: A string. If None, Django will use the value of the DEFAULT_FROM_EMAI

code.djangoproject.com

'Django' 카테고리의 다른 글

[Django] Django duplicate app name "auth"  (0) 2021.05.22