フレームワーク連携
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 にファクトリーを追加します。
# config/services.yaml — add to your existing services section.
services:
Sendery\Symfony\SenderyTransportFactory:
tags: ['mailer.transport_factory']API キーを設定
.env.local またはホスティングのシークレット設定に MAILER_DSN を指定します。
MAILER_DSN=sendery://[email protected]Mailer を設定
既存の Mailer 設定でこの DSN を使用します。
# config/packages/mailer.yaml
framework:
mailer:
dsn: '%env(MAILER_DSN)%'メールを送信
MailerInterface を注入して TemplateEmail を送信します。Symfony の検証に from() が必要ですが、実際の送信者は Sendery のプロジェクト設定を使用します。宛先は 1 件です。HTML メール、添付ファイル、cc、bcc には対応していません。
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 の再試行ではキーと変数が保持されます。
# 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 では一時的なエラーを再試行し、検証・支払いエラーを再試行しないように設定してください。