Sendery
Sendery

フレームワーク連携

Django

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

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

動作環境

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

バックエンドを設定

name と action_url を使う welcome テンプレートを公開し、プロジェクトの API キーを作成します。サーバーの環境変数 SENDERY_API_KEY に保存してください。 Django の設定にバックエンドとキーを追加します。

settings.py
# settings.py
import os

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

メールを送信

TemplateEmail に宛先を 1 件指定します。sendery_receipt に受付済みメールの ID と状態が入ります。通常の EmailMessage、添付ファイル、cc、bcc には対応していません。送信者は Sendery のプロジェクトで設定します。

Python
from sendery_django import TemplateEmail

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

print(email.sendery_receipt["id"])

パスワード再設定

name と action_url を使う password-reset テンプレートを公開し、Django の認証ビューで SenderyPasswordResetForm を使います。urlpatterns に以下を追加し、templates/registration/ に Django 標準の再設定用 HTML ページを用意します。既存ルートがある場合は再設定ビューの form_class のみ変更してください。

urls.py
# 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"),
]

送信を再試行

fail_silently=False にすると、API エラーで SenderyError を受け取れます。バックエンドは 1 回のみ試行します。バックグラウンド処理では送信前に宛先、変数、idempotency_key を保存し、再試行でも同じ値を使います。

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