티스토리 뷰

Programming/Django

Django로 메일 보내기

prograsshopper_ 2021. 5. 12. 15:57

장고는 엔간한건 다 제공해주고 있고, 메일보내는 방법도 제공하고 있긴 하지만, 실질적으로 운영해보면 클라우드 서비스상의 정책 등으로 안되는 경우가 많다.
이런 이유로 인해 메일 보내기 기능을 추가할 때 외부 서비스를 활용하기로 했다.
처음에는 AWS SES를 쓰려고 했는데 웬걸... 해당 서비스는 그냥 바로 쓸수 있는게 아니라 블특정 다수에게 메일을 보내려면 샌드박스에서 탈출해야하는데 이 샌드박스를 나가기 위해선 AWS에 신청한 후 승인을 받아야 한다.
시간이 다소 지체될 것 같아서 그냥 구글꺼를 쓰기로 했다.

구글메일 smtp를 사용할거면 우선 계정의 보안 설정을 건드려야한다.
구글의 계정사진 옆의 점 9개가 있는걸 눌러보면 'Google계정'이 있다. 이걸 누른 다음 '보안'을 클릭하면 해당 페이지에서 '보안 수준이 낮은 앱의 액세스'가 있는데 이걸 사용하는 걸로 바꿔준다.

그 다음엔 장고 프로젝트를 열어 settings 파일을 연다.
메일 관련 세팅은 다음과 같이 해주면 된다.

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.googlemail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = <사용하려는 유저 메일>
EMAIL_HOST_PASSWORD = <해당 유저의 비밀번호>
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = <나는 EMAIL_HOST_USER로 세팅했다>

이렇게 세팅했으면 메일이 잘 가는지 테스트를 해보자.

(해당 테스트는 그냥 shell상에서 작성해서 보내본 것이다. 본격적으로 테스트코드를 추가하고 싶다면 TestCase 등을 사용해서 작성하는 쪽이 맞다.)

from django.core.mail import EmailMessage

title = "테스트 메일입니다"
text_content = f"""
            테스트용 메일입니다.
            성공적이군요
            감사합니다.
            """
email = EmailMessage(title, text_content, to=['test@test.com'])
result = email.send()

여기에서 result 값이 1이면 잘 간거고, 아니면 뭔가 문제가 있는 것이니 로그를 확인해보는 것이 좋겠다.
(물론 이렇게 보내면 메일 본문이 너무 못생겼으므로 상황에 따라선 커스텀을 해주는 것이 좋겠지만, 나의 경우엔 메일의 생김 여부가 크게 중요하진 않아서 그냥 이대로 사용했다.)

반응형
댓글