SendGrid API를 이용해 메일 보내기

guava·2021년 12월 30일
1
post-custom-banner

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

SendGrid API Key 및 Sender Email 생성하기


  1. SendGrid에 회원가입 한다.
  2. settings > API Keys로 접속해서 API Key를 생성한다. (https://app.sendgrid.com/settings/api_keys)
  3. API Key를 생성하고 나면 Create a sender identity 문구가 출력된다.
  4. 출력된 문구를 클릭 후 Sender Email 생성 (https://app.sendgrid.com/settings/sender_auth/senders/new)
  5. 샌더 이메일 인증 과정 필요

장고 프로젝트에 적용


settings에 SendGrid 설정 추가

# Email with Send Grid 
# https://docs.sendgrid.com/for-developers/sending-email/django

SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'# this is exactly the value 'apikey'
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587
EMAIL_USE_TLS =True

WELCOME_EMAIL_SENDER = ''  # Sender Email 추가!

User 모델 메서드에 이메일 보내는 코드 작성

accounts/models.py

# accounts/models.py

class User(AbstractUser):
    website_url = models.URLField(blank=True)
    bio = models.TextField(blank=True)

    def send_welcome_email(self):
        subject = render_to_string('accounts/welcome_email_subject.txt')
        content = render_to_string('accounts/welcome_email_content.txt', {
            "user": self,
        })
        sender_email = settings.WELCOME_EMAIL_SENDER
        return send_mail(subject, content, sender_email, [self.email], fail_silently=False)

이메일 템플릿 작성

User.send_welcome_email 에서 render_to_string에 삽입하기 위한 템플릿을 작성. (이메일 제목 및 내용)

txt 확장자임에도 템플릿 문법도 사용할 수 있어서 좋다.

accounts/templates/accounts/welcome_email_content.txt

Instagram 가입을 환영합니다.

{{ user.first_name }} {{ user.last_name }}님 가입을 환영합니다.

- Instagram 운영자 드림

accounts/templates/accounts/welcome_email_title.txt

Instagram 가입을 환영합니다.

쉘에서 실행해보기

$ python manage.py shell
>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.first()
>>> user.send_welcome_email()  # 1: 성공
post-custom-banner

0개의 댓글