장고로 메일보내기

김민정·2022년 5월 29일
0

장고

목록 보기
1/2
  1. django.core.mail과 함께 보낸 전자 메일의 문자 집합은 default_charset 설정 값으로 설정됩니다.

    default_charset 설정 값이란 무엇입니까?
    ㅡMIME 유형이 수동으로 지정되지 않은 경우 모든 HttpResponse 개체에 사용할 기본 문자 집합으로 기본값으로 utf-8을 가지고 있습니다. 내용 유형 헤더를 구성할 때 사용된다고 합니다.
    1 MIME유형이란 - 파일 변환을 이야기합니다. Multipurpose Internet Mail Extensions의 약자로 이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었다고 하지만 현재는 웹을 통해 여러 형태의 파일을 전달하는데 널리 사용된다고 합니다.
    2 HttpResponse란 - 장고에서, 그리고 파이썬에서 파일 이미지등 다양한 응답을 함을 이야기하며 하나의 함수는 최소 하나의 httpresponse를 반환해야합니다.서버의 HTTP응답을 감싸는 인스턴스이기 때문에 요청 헤더와 엔티티 바디에 대한 액세스를 제공하며 iterable 객체입니다.

  2. send_mail()로 장고에서 메일을 보낼 수 있습니다.
    2-1. send_mail()의 구조

    send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)

-대부분의 경우 django.core.mail.send_mail()을 사용합니다.
-subject와 message, from_email, recipient_list는 필수적인 부분입니다.
subject는 제목으로 문자열입니다.
message는 보낼 메시지로 문자열입니다.
from_email은 송신자로 문자열이지만 없다면 장고는 default_from_email 세팅의 값을 사용할 수 있습니다.

defalut_from_email의 default값은 'webmaster@localhost'입니다. 사이트 관리자의 다양한 자동 통신에 사용할 기본 전자 메일 주소입니다. 관리자 및 관리자에게 전송된 오류 메시지는 포함되지 않습니다. server_email에 더 자세한 내용이 있다고 합니다.

server_email의 default 값은 root@localhost로 되어 있습니다.

수신 리스트는 각 전자메일 주소의 문자열 목록입니다. 각 구성원은 전자메일 메시지의 수신인 필드에 있는 다른 수신인을 볼 수 있다고 합니다.
fail_silently는 오류에 관한 필드입니다. send_mail()은 오류 발생시 관련 smtplib을 생성합니다.

smtplib은 파이썬에서 메일을 보내기 위해서 제공하는 기본 라이브러리입니다. 이메일을 보내는 데 사용되는 클라이언트입니다. 지메일 외에 다른 메일 서비스도 제공합니다.

auth_user- smtp 서버 인증에 사용되며 setting에 있는 email_host_user와 연결됩니다.
auth_password - smtp 서버 인증에 사용할 암호로 setting에 있는 email_host_password와 연결됩니다.
connection은 메일을 보내는 데 사용할 선택적 전자메일 백엔드라고 하며 설정하지 않아도 기본 백엔드 인스턴스가 사용된다고 합니다.

기본 백엔드 인스턴스
실제 전송이 이메일 백엔드 인스턴스에서 이루어진다고 합니다.
내부 메서드들로는 다음과 같은 메서드들이 있습니다.
1.open() - 연결 인스턴스화하기
메일 열기가 아니라 연결 인스턴스화하기라는 건 무슨 의미입니까? - 인스턴스화 = 실체화 = 메일을 실제로 보여준다 = 메일을 만든다 = 메일을 연다 이렇게 연결되는 말인것 같습니다.
2.close()-메일 닫기
3.send_messages(email_messages)-emailMessage 객체의 리스트를 보냅니다. 연결이 열려 있지 않으면 이 호출은 암시적으로 연결을 열고 나중에 연결을 닫습니다. 연결이 이미 열려있다면 메일 발송후 열린 상태를 유지한다고 합니다.
메일 발송 후 열린 상태를 유지하는 것에는 어떤 의미가 있습니까? -
2. end_messages로 해결되는데 open과 close는 왜 필요한거죠?

EmailMessages Objects
emailMessage 클래스는 지정된 순서대로 사용해 초기화되는데 모든 매개 변수는 선택사항이라고 합니다. send()메서드를 호출하기 전에는 언제든지 설정가능하다고 합니다.
subject- 제목
body-본문
from_email 보내는 주체
to 받는 주체
bcc 전자메일의 사본을 받지만 다른 수신자의 주소는 받을 수 없는 사람들의 목록
cc 전자메일의 사본을 받는 사람들의 목록
connection - 여러 메시지에 대한 동일한 연결을 사용하게 위해서 필요한 매개변수로 생략하면 send()가 호출될때 새 연결이 생성됩니다.
attachments - 메시지에 추가할 첨부파일 목록입니다. Mimer기본 인스턴스일수도 있고 (파일이름, 내용, MiMe 형식)일 수도 있습니다.
header - 메시지에 추가할 추가 헤더 사전으로 딕셔너리 형식입니다.
replyto - 수신자 주소 목록

  1. 장고에서 메일을 보내려면 다음을 선택해야 합니다.
    3-1. 메일을 동기로 보낼 것인가 비동기로 보낼 것인가?
    -동기로 보내려면 --->
    -비동기로 보내려면 ---> celery를 사용하거나 파일썬에 쓰레드를 이용한다.

3-2. celery로 비동기 이메일을 보내기
3-2-1. celery란 무엇인가 - 메세지 전달을 기반으로 하는 비동기 task queue라고 합니다. AMQP라는 프로토콜을 기반으로 만들어졌습니다
client가 작업을 요청하면 worker는 작업을 수행하고 broker는 메시지를 전달합니다.
3-2-1-1 celery에서 동작이 실패하는 경우
메세지를 broker에서 consumer로 보냈는데 consumer가 message에 대한 처리를 완료하고 acknowledge를 하지 못하면 broker는 메세지가 제대로 처리되었는지 알 수 없기 때문에 여러번 보낸다. idempotence(여러번 실행해도 같은 결과가 나온다) 하여야 한다고 한다.

0개의 댓글