Sendery
Sendery

Framework Integrations

Laravel integration

Send transactional email with Sendery templates through Laravel Mail and Notifications.

Install
composer require sendery/laravel:^0.1.4
Source code

Requirements

Laravel 13 and PHP 8.3+ with the cURL extension.

Configure your application

Create a project API key and add these values to .env. The sendery mailer is ready to use after installation. Set MAIL_FROM_ADDRESS to your project’s sender address.

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

Send an email

Send a published template with TemplateMail. Replace your-template with your published template’s key and data with its variables. Set the sender in your Sendery project.

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

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

Queue an email

Use queue() to send in the background. With a Laravel queue worker running, failed jobs can retry the same email safely.

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

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

Password resets and verification

Choose a published template for each email, then add this to AppServiceProvider::boot(). Laravel supplies name and action_url, so use {{ action_url }} for the link in your templates.

To send in the notification’s language, add useNotificationLocale: true and publish the translations.

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

public function boot(): void
{
    Sendery::useBuiltInNotifications(
        passwordResetTemplate: 'your-reset-template',
        emailVerificationTemplate: 'your-verification-template',
    );
}

Custom notifications

Use SenderyChannel to send from a Laravel notification. Return the template key and its variables from toSendery().

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

class TemplateNotification extends Notification
{
    public function __construct(
        public string $template,
        public array $data,
    ) {}

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

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

$user->notify(new TemplateNotification('your-template', ['name' => 'Alex']));

Handle failures

A failed send throws an exception. Use queue retries for timeouts and temporary failures. Fix API key, template, or billing errors before trying again.

Send a specific version

Choose a published template version to keep sending it after newer versions are published. By default, Sendery uses the latest version.

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

$email = (new TemplateMail('your-template', [
    'name' => 'Alex',
    'action_url' => 'https://example.com/start',
]))->version(3);

Mail::mailer('sendery')->to('[email protected]')->send($email);

Attachments

Attach files to TemplateMail with Laravel’s attachData() method.

Send up to 10 files totaling 5 MB. See the attachment reference for supported formats and limits.

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

$email = new TemplateMail('your-template', [
    'name' => 'Alex',
    'action_url' => 'https://example.com/start',
], idempotencyKey: 'your-idempotency-key');

$email->attachData(file_get_contents('/path/document.pdf'), 'document.pdf', [
    'mime' => 'application/pdf',
]);

Mail::mailer('sendery')->to('[email protected]')->send($email);