Sendery
Sendery

フレームワーク連携

Symfony

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

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

動作環境

Symfony Mailer 7.4、PHP 8.3 以上と cURL 拡張が必要です。

トランスポートを登録

name と action_url を使う welcome テンプレートを公開し、プロジェクトの API キーを作成します。config/services.yaml にファクトリーを追加します。

YAML
# config/services.yaml — add to your existing services section.
services:
  Sendery\Symfony\SenderyTransportFactory:
    tags: ['mailer.transport_factory']

API キーを設定

.env.local またはホスティングのシークレット設定に MAILER_DSN を指定します。

.env.local
MAILER_DSN=sendery://[email protected]

Mailer を設定

既存の Mailer 設定でこの DSN を使用します。

YAML
# config/packages/mailer.yaml
framework:
  mailer:
    dsn: '%env(MAILER_DSN)%'

メールを送信

MailerInterface を注入して TemplateEmail を送信します。Symfony の検証に from() が必要ですが、実際の送信者は Sendery のプロジェクト設定を使用します。宛先は 1 件です。HTML メール、添付ファイル、cc、bcc には対応していません。

PHP
use Sendery\Symfony\TemplateEmail;
use Symfony\Component\Mailer\MailerInterface;

final class WelcomeEmails
{
    public function __construct(private MailerInterface $mailer) {}

    public function send(string $address, string $name): void
    {
        $email = (new TemplateEmail())
            ->from('[email protected]')
            ->to($address)
            ->template('welcome', [
                'name' => $name,
                'action_url' => 'https://example.com/start',
            ]);

        $this->mailer->send($email);
    }
}

Messenger で送信

Symfony Messenger と利用するトランスポートをインストールし、MESSENGER_TRANSPORT_DSN を設定してメールを async にルーティングします。php bin/console messenger:consume async を実行してください。同じ TemplateEmail の再試行ではキーと変数が保持されます。

YAML
# config/packages/messenger.yaml
framework:
  messenger:
    transports:
      async: '%env(MESSENGER_TRANSPORT_DSN)%'
    routing:
      'Symfony\Component\Mailer\Messenger\SendEmailMessage': async

エラー処理

API エラーは TransportException を返し、直前の例外は Sendery\ApiException です。status と errorCode を確認します。トランスポートは 1 回のみ試行します。Messenger では一時的なエラーを再試行し、検証・支払いエラーを再試行しないように設定してください。