[Django] AWS-SES를 이용하여 메일 발송하기(2)

dj-yang·2021년 7월 24일
1

django

목록 보기
4/7
post-thumbnail

서론

해당 글은 시리즈 2번째 글입니다. 아직 첫 번째 게시물을 확인 안하시고 오셨다면 확인하고 오셔주세요!

[Django] AWS-SES를 이용하여 메일 발송하기(1) - AWS-SES 설정

이메일 발송 설정하기..


장고 앱 설정하기

엔드포인트 설정

엔드포인트를 먼저 설정해줘야 해야 한다. 저는 엔드 포인트를 입구라고 생각하고 있어요.
메일 발송 프로세스가 1. 장고 앱에서 메일발송 요청 -> 2. aws-ses에서 자체 smtp 서버를 통해 메일 발송 형태로 진행될텐데, 이때 1과 2를 연결해주는 것이라고 생각하면 편하다!

장고에게 우리가 사용할 엔드포인트 설정을 해줘야 한다.

# settins.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = '[AWS Simple Email Service -> SMTP settings -> Server_Name]'
EMAIL_HOST_USER = '[이전 글 SMTP 자격증명 설정에서 얻은 Access Key ID]'
EMAIL_HOST_PASSWORD = '[이전 글 SMTP 자격증명 설정에서 얻은 Access Key PW]'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

Access Key ID나 Access Key PW처럼 서비스에 접속 가능한 값들은 github public 레포 같이 공개된 곳에 올리면 안됩니다!(비밀키 관리하는 방법을 배우세요)

이제 모든 세팅이 끝났습니다. 메일을 보내봅시다.

메일 보내기

메일을 발송할 때는 장고에서 제공하는 mail 시스템을 사용할 생각이다. - 장고 메일 시스템

장고에서 제공하는 기능을 이용하면 별도의 url을 사용할 필요 없이 자신이 가지고 있던 로직 내에서 메일 발송을 사용할 수 있다는 점 같다.

메일을 발송하기 위해 기존에 있는 앱에 views를 추가 한다.

from django.core.mail import send_mail

def foo(request):
    ...
    send_mail(
    '제목',
    '내용',
    '발신자(aws 등록한 도메인만 사용 가능)',
    ['수신자'],
    fail_silently=False,
    )
    ...

이때, 만약 내가 sandbox 상태라면 to@example.com 자리에는 확인된 수신자만 사용할 수 있다.

확인된 수신자 설정 : AWS Simple Email Service -> Email Addresses -> Verify a New Email Adresses

해당 기능을 실행하시면 정상적으로 메일이 발송되는 것을 볼 수 있다.


추가

HTML로 이메일 보내기

메일 발송 기능을 구현했더니 이번에는 디자인이 너무 별로인 것 같다고 생각이 들었다.
벨로그 가입할 때 인증 메일이 생각났다..

이쁘다...
개발자 도구로 열어보니 html로 이루어진 것 같다.

어떻게 하면 나도 이쁜 이메일을 보낼 수 있을 지 찾아보니 역시 장고에서도 좋은 기능을 제공 해주고 있었다.

EmailMultiAlternatives

장고 메일에서 제공해주는 기능으로 이번에는 내가 사용하는 코드를 가지고 왔다.

from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags

def foo(request):
	subject, from_email, to = '제목', '발신자', ['수신자']
	html_message = render_to_string('html 파일 위치')
	plain_message = strip_tags(html_message)

	# Sending email here
	msg = EmailMultiAlternatives(subject=subject, body=plain_message, 
    					from_email=from_email,to=to)      
	msg.attach_alternative(html_message, "text/html")
	msg.content_subtype = 'html'
	msg.mixed_subtype = 'related'

	msg.send()

이미 장고를 사용할 줄 아는 개발자가 이 글을 볼 것이라 예상하고 따로 설명은 하지 않겠다.(사실 잘 모르기도 하고...)


참고

django sending email - https://docs.djangoproject.com/en/3.2/topics/email/
AWS SES DOCS - https://docs.aws.amazon.com/ses/latest/dg/send-email-getting-started-migrate.html

profile
비전공자가 고통받으며 개발합니다

0개의 댓글