SendGrid APIを使用してメールを送信


フィードバック機能付き完全なPython/張庫Webサービス開発ガイド講義を聞いて整理した文章.

SendGrid API KeyとSender Emailの作成

  • SendGridに加入する.
  • settings > API Keys接続でAPI鍵を生成する.( https://app.sendgrid.com/settings/api_keys )
  • API鍵生成後、Create a sender identity文が出力されます.
  • 出力された文字をクリックしてSender Emailを作成(https://app.sendgrid.com/settings/sender_auth/senders/new)
  • Sander電子メール認証コースが必要
  • 長期プロジェクトへの適用


    設定に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 추가!
    

    ユーザー・モデル・メソッドに電子メールを送信するコードの作成


    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: 성공