Envoyer un email transactionnel en Python sans serveur SMTP

Configurer SMTP pour un mot de passe oublié n’est pas du travail produit. En Python, un client HTTP typé suffit pour remettre ce problème à Spore : votre application décrit le message, la plateforme gère DKIM, la file d’envoi, les retries et les bounces.

Ce que nous allons construire

Un envoi de bienvenue depuis une application Python, sûr à retenter après une coupure réseau et observable jusqu’à sa livraison.

1. Préparer le domaine et la clé

Dans Spore, ajoutez votre domaine, publiez les enregistrements DKIM et SPF, puis activez l’adresse hello@votredomaine.fr. Créez ensuite une clé API et gardez-la hors du dépôt :

export SPORE_API_KEY="sk_live_..."
pip install spore-email

2. Configurer le client une fois

import os
import spore_email
 
configuration = spore_email.Configuration(
    api_key={"BearerAuth": os.environ["SPORE_API_KEY"]},
    api_key_prefix={"BearerAuth": "Bearer"},
)

3. Envoyer avec une clé d’idempotence

from uuid import uuid4
from spore_email.api.messaging_api import MessagingApi
from spore_email.models.send_email_send_email_request import SendEmailSendEmailRequest
 
message = SendEmailSendEmailRequest(
    var_from="hello@votredomaine.fr",
    to=["alex@example.com"],
    subject="Votre compte est prêt",
    html="<p>Bienvenue Alex.</p>",
)
 
with spore_email.ApiClient(configuration) as client:
    sent = MessagingApi(client).send_email(message, idempotency_key=str(uuid4()))

L’API répond 202 parce que l’envoi est asynchrone. Votre requête n’attend pas la réponse du serveur mail du destinataire.

4. Rendre le retry sûr

Ne générez pas une nouvelle clé à chaque tentative technique. Associez-la à l’action métier — l’identifiant de commande, d’inscription ou de tâche. Si le processus tombe après le POST, la même clé renvoie la première réponse pendant 24 heures, sans nouvel email.

5. Observer la livraison

Conservez sent.message_id, puis consultez GET /emails/{id} pour voir chaque tentative SMTP. En production, branchez plutôt les webhooks email.sent, email.bounced et email.failed.

Pourquoi ce chemin est plus simple

Votre code Python ne contient ni socket SMTP, ni clé DKIM, ni logique de backoff. Il exprime seulement l’intention : envoyer cet email une fois. C’est la bonne frontière pour une application solo-maintenable.

Prochaine étape : consultez la documentation du SDK Python ou la référence de sendEmail.