Envoyer un email transactionnel dans Laravel sans gérer SMTP
Laravel rend l’envoi d’emails agréable. L’exploitation SMTP, elle, reste un deuxième métier : réputation IP, DKIM, retries, bounces et suppressions. Le SDK Spore conserve l’ergonomie Laravel tout en déplaçant cette plomberie hors de votre application.
Le résultat attendu
Un client injectable, appelé depuis un job de queue, avec un retry idempotent. Votre contrôleur reste rapide et votre utilisateur ne reçoit jamais deux fois le même email.
1. Installer et configurer
composer require lalternative/sporeSPORE_API_KEY=sk_live_...Ajoutez la clé dans config/services.php, puis construisez le client dans un
service provider :
use GuzzleHttp\Client;
use Lalternative\Spore\Api\MessagingApi;
use Lalternative\Spore\Configuration;
$this->app->singleton(MessagingApi::class, function () {
$config = Configuration::getDefaultConfiguration()
->setApiKey('Authorization', config('services.spore.key'))
->setApiKeyPrefix('Authorization', 'Bearer');
return new MessagingApi(new Client(), $config);
});2. Envoyer depuis un job
use Illuminate\Contracts\Queue\ShouldQueue;
use Lalternative\Spore\Api\MessagingApi;
use Lalternative\Spore\Model\SendEmailSendEmailRequest;
final class SendWelcomeEmail implements ShouldQueue
{
public function __construct(
public readonly string $userId,
public readonly string $email,
) {}
public function handle(MessagingApi $spore): void
{
$message = new SendEmailSendEmailRequest([
'from' => 'hello@votredomaine.fr',
'to' => [$this->email],
'subject' => 'Bienvenue',
'html' => '<p>Votre compte est prêt.</p>',
]);
$spore->sendEmail($message, "welcome:{$this->userId}");
}
}3. Pourquoi la clé est métier
Laravel peut relancer un job après un timeout alors que Spore a déjà reçu le
message. La clé welcome:<userId> reste identique d’une tentative à l’autre.
Spore peut donc rejouer la réponse sans réexpédier l’email.
4. Ne bloquez pas le job jusqu’à la livraison
Un 202 confirme la mise en file, pas la réception finale. Laissez le job se
terminer et utilisez un webhook pour mettre à jour votre propre état si votre
parcours en dépend. Pour le support, GET /emails/{id} expose l’historique de
chaque tentative.
Ce que vous ne maintenez plus
Pas de mot de passe SMTP, de rotation DKIM, de retry artisanal ni de liste de bounces dans Laravel. Le framework orchestre votre logique produit ; Spore orchestre la livraison.
Continuez avec la documentation PHP/Laravel ou la
référence de sendEmail.