Aller au contenu
Tous les articles

Laravel 11 : envoyer ses emails avec Brevo API sans SMTP

Par Tom Jamon2 min de lecture

Lorsque l'on utilise Laravel, la méthode la plus courante pour envoyer des emails via Brevo consiste à configurer un serveur SMTP. Cependant, Brevo propose également une API transactionnelle qui offre plusieurs avantages :

  • Pas de gestion SMTP
  • Meilleure fiabilité
  • Temps d'envoi réduits
  • Gestion native des templates Brevo
  • Suivi des événements (ouvertures, clics, bounces, etc.)

Dans cet article, nous allons voir comment intégrer Brevo comme transport d'emails dans Laravel 11 en utilisant l'API officielle.

Installation des dépendances

Commencez par installer le transport Brevo pour Symfony Mailer ainsi que le client HTTP requis :

composer require symfony/brevo-mailer
composer require symfony/http-client

Création de la clé API Brevo

Depuis votre interface Brevo :

  1. Rendez-vous dans SMTP & API
  2. Ouvrez l'onglet API Keys
  3. Créez une nouvelle clé API transactionnelle

Vous obtiendrez une clé ressemblant à :

xkeysib-xxxxxxxxxxxxxxxxxxxxxxxx

Configuration Laravel

Ajoutez votre clé API dans le fichier .env :

MAIL_MAILER=brevo

BREVO_API_KEY=xkeysib-xxxxxxxxxxxxxxxxxxxxxxxx

MAIL_FROM_ADDRESS=noreply@votredomaine.fr
MAIL_FROM_NAME="${APP_NAME}"

Puis dans config/services.php :

return [

    // ...

    'brevo' => [
        'key' => env('BREVO_API_KEY'),
    ],

];

Déclaration du transport Brevo

Ajoutez un nouveau mailer dans config/mail.php :

'brevo' => [
    'transport' => 'brevo',
],

Laravel ne connaît pas nativement le transport Brevo. Il faut donc l'enregistrer dans un Service Provider.

Dans AppServiceProvider.php :

use Illuminate\Support\Facades\Mail;
use Symfony\Component\Mailer\Bridge\Brevo\Transport\BrevoTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;

public function boot(): void
{
    Mail::extend('brevo', function () {
        return (new BrevoTransportFactory())->create(
            new Dsn(
                'brevo+api',
                'default',
                config('services.brevo.key')
            )
        );
    });
}

Nettoyage du cache Laravel

Après modification de la configuration :

php artisan optimize:clear

Test d'envoi

Vous pouvez maintenant envoyer un email normalement :

use Illuminate\Support\Facades\Mail;

Mail::raw('Test Brevo API', function ($message) {
    $message->to('contact@example.com')
        ->subject('Test Brevo');
});

Ou via une Mailable :

Mail::to($user)->send(new WelcomeMail());

Aucune modification supplémentaire n'est nécessaire dans votre code métier.

Erreurs courantes

Unsupported mail transport [brevo]

Le transport n'a pas été enregistré dans le AppServiceProvider ou le package symfony/brevo-mailer n'est pas installé.

User is not set

Le constructeur Dsn est mal configuré. La clé API doit être passée comme troisième argument.

You cannot use AbstractHttpTransport as the HttpClient component is not installed

Le package suivant est manquant :

composer require symfony/http-client

Conclusion

L'utilisation de Brevo via API permet de conserver toute la puissance du système de mails Laravel tout en bénéficiant des performances et fonctionnalités de l'API transactionnelle Brevo.

Une fois la configuration terminée, vos Mailables, notifications et files d'attente continuent de fonctionner exactement comme avec SMTP, sans modification du code applicatif.

Partager cet article