Sendery
Sendery

フレームワーク連携

Django

Django のメールバックエンドを使い、Sendery のテンプレートでトランザクションメールを送信します。

インストール
pip install sendery-django==0.1.4
ソースコード

動作環境

Django 5.2 と Python 3.10 以上が必要です。

バックエンドを設定

プロジェクトの API キーを作成して環境変数 SENDERY_API_KEY に保存し、settings.py にバックエンドを追加します。

settings.py
# settings.py
import os

EMAIL_BACKEND = "sendery_django.backend.EmailBackend"
SENDERY_API_KEY = os.environ["SENDERY_API_KEY"]

メールを送信

TemplateEmail で公開済みテンプレートを送信します。your-template を公開済みテンプレートのキーに、data をそのテンプレートの変数に置き換えてください。送信者は Sendery のプロジェクトで設定します。

送信後の sendery_receipt にメールの ID と状態が入ります。

Python
from sendery_django import TemplateEmail

email = TemplateEmail(
    to="[email protected]",
    template="your-template",
    data={"name": "Alex", "action_url": "https://example.com/start"},
)
email.send(fail_silently=False)

print(email.sendery_receipt["id"])

パスワード再設定

SENDERY_PASSWORD_RESET_TEMPLATE に公開済みテンプレートのキーを指定し、再設定ビューで SenderyPasswordResetForm を使います。フォームが name と、Django の再設定リンクを action_url として渡します。

既存の再設定ルートがある場合はフォームだけ変更してください。確認画面はそのまま使えます。

urls.py
# settings.py
SENDERY_PASSWORD_RESET_TEMPLATE = "your-reset-template"

# urls.py
from django.contrib.auth import views as auth_views
from django.urls import path
from sendery_django.forms import SenderyPasswordResetForm

urlpatterns = [
    path("password-reset/", auth_views.PasswordResetView.as_view(
        form_class=SenderyPasswordResetForm,
    ), name="password_reset"),
    path("password-reset/done/", auth_views.PasswordResetDoneView.as_view(),
         name="password_reset_done"),
    path("reset/<uidb64>/<token>/", auth_views.PasswordResetConfirmView.as_view(),
         name="password_reset_confirm"),
    path("reset/done/", auth_views.PasswordResetCompleteView.as_view(),
         name="password_reset_complete"),
]

送信を再試行

送信に失敗すると SenderyError が発生します。バックグラウンド処理では、同じメールデータと idempotency_key で一時的なエラーを再試行します。タスクの失敗を検出できるように fail_silently=False を使ってください。

Python
# Use the same saved recipient, variables, and event key on every attempt.
email = TemplateEmail(
    to="[email protected]",
    template="your-template",
    data={"name": "Alex", "action_url": "https://example.com/start"},
    idempotency_key="your-idempotency-key",
)
email.send(fail_silently=False)

特定のバージョンを送信

公開履歴のバージョンを指定すると、テンプレートの更新後もその版を送信できます。指定しない場合は最新バージョンを使います。

Python
from sendery_django import TemplateEmail

email = TemplateEmail(
    to="[email protected]",
    template="your-template",
    data={"name": "Alex", "action_url": "https://example.com/start"},
).version(3)

email.send(fail_silently=False)

添付ファイル

Djangoの attach() メソッドで TemplateEmail にファイルを添付します。

最大10ファイル、合計5 MBまで送信できます。対応形式と上限は 添付ファイルのリファレンス を参照してください。

使用例
from pathlib import Path
from sendery_django import TemplateEmail

email = TemplateEmail(
    to="[email protected]",
    template="your-template",
    data={"name": "Alex", "action_url": "https://example.com/start"},
    idempotency_key="your-idempotency-key",
)
email.attach("document.pdf", Path("document.pdf").read_bytes(), "application/pdf")
email.send(fail_silently=False)