Sendery
Sendery

フレームワーク連携

Laravel

Laravel Mail と Notifications を使い、Sendery のテンプレートでトランザクションメールを送信します。

インストール
composer require sendery/laravel:^0.1
ソースコード

動作環境

Laravel 13、PHP 8.3 以上と cURL 拡張が必要です。

アプリの設定

name と action_url を使う welcome テンプレートを公開し、プロジェクトの API キーを作成します。サーバーの環境変数 SENDERY_API_KEY に保存してください。 以下を .env に追加します。sendery メーラーは自動登録されます。Laravel の検証に MAIL_FROM_ADDRESS が必要ですが、実際の送信者は Sendery のプロジェクト設定を使用します。

.env
SENDERY_API_KEY=your_project_api_key
[email protected]
MAIL_FROM_NAME="Your app"

メールを送信

sendery メーラーで TemplateMail を使います。宛先は 1 件で、公開済みテンプレートを指定します。HTML メール、添付ファイル、cc、bcc には対応していません。

PHP
use Illuminate\Support\Facades\Mail;
use Sendery\Laravel\TemplateMail;

Mail::mailer('sendery')->to('[email protected]')->send(
    new TemplateMail('welcome', [
        'name' => 'Alex',
        'action_url' => 'https://example.com/start',
    ])
);

キューで送信

send() の代わりに queue() を使います。Laravel のキュー接続を設定してワーカーを起動してください。同じキュー内のメールを再試行すると、キーと変数が保持されます。

PHP
use Illuminate\Support\Facades\Mail;
use Sendery\Laravel\TemplateMail;

Mail::mailer('sendery')->to('[email protected]')->queue(
    new TemplateMail('welcome', [
        'name' => 'Alex',
        'action_url' => 'https://example.com/start',
    ])
);

パスワード再設定とメール認証

name と action_url を使う password-reset と email-verification テンプレートを公開します。AppServiceProvider::boot() に以下を追加すると、Laravel 標準の再設定・認証通知を Sendery で送信します。独自の通知サブクラスは対象外です。既定ではテンプレートの既定言語を使用します。通知の言語を選ぶには useNotificationLocale: true を渡し、使用する言語を公開してください。

PHP
// app/Providers/AppServiceProvider.php
use Sendery\Laravel\Sendery;

public function boot(): void
{
    Sendery::useBuiltInNotifications();
}

独自の通知

via() で SenderyChannel::class を返し、toSendery() を定義します。通知の作成時に元のイベントキーと変数を渡します。公開済み言語を選ぶには locale も返してください。通知先のメールルートは 1 件のアドレスを返す必要があります。

PHP
use Illuminate\Notifications\Notification;
use Sendery\Laravel\SenderyChannel;

class OrderConfirmation extends Notification
{
    public function __construct(
        private string $eventKey,
        private array $variables,
    ) {}

    public function via(object $notifiable): array
    {
        return [SenderyChannel::class];
    }

    public function toSendery(object $notifiable): array
    {
        return [
            'template' => 'order-confirmation',
            'data' => $this->variables,
            'idempotency_key' => $this->eventKey,
        ];
    }
}

エラー処理

メーラーは Symfony の TransportException を返します。API エラーでは直前の例外が Sendery\ApiException になります。通知チャネルは Sendery\ApiException を直接返します。どちらも自動再試行しないため、一時的なエラーには元のキーとデータで再試行してください。