Envoyer un email transactionnel dans Rails avec Active Job
Action Mailer est excellent pour composer un message. Mais une application Rails solo-maintenable ne devrait pas aussi exploiter une infrastructure SMTP. Avec Spore, Active Job garde la responsabilité du workflow ; l’API prend celle de la livraison.
L’intégration en trois pièces
Un initializer pour la clé, un modèle de requête typé, puis un job idempotent. Rien à configurer sur les ports 25 ou 587.
1. Installer le gem
# Gemfile
gem "spore-email"bundle install2. Configurer Spore
# config/initializers/spore.rb
SporeEmail.configure do |config|
config.api_key["Authorization"] = ENV.fetch("SPORE_API_KEY")
config.api_key_prefix["Authorization"] = "Bearer"
end3. Envoyer depuis Active Job
class SendWelcomeEmailJob < ApplicationJob
queue_as :mailers
def perform(user_id)
user = User.find(user_id)
message = SporeEmail::SendEmailSendEmailRequest.new(
from: "hello@votredomaine.fr",
to: [user.email],
subject: "Bienvenue",
html: ApplicationController.render(
template: "emails/welcome",
assigns: { user: user },
layout: "mailer"
)
)
SporeEmail::MessagingApi.new.send_email(
message,
idempotency_key: "welcome:#{user.id}"
)
end
endVous conservez vos vues Rails et vos layouts. Seul le transport change : le HTML rendu part vers une API HTTP au lieu d’une session SMTP.
4. Laisser les retries coopérer
Active Job peut relancer perform. La clé stable welcome:<id> garantit que
ces relances techniques représentent toujours une seule intention métier. Une
nouvelle notification légitime doit, elle, recevoir une nouvelle clé.
5. Suivre le résultat
L’appel renvoie un identifiant et le statut initial queued. Pour les parcours
qui doivent réagir à un bounce ou à un échec définitif, consommez les webhooks
Spore. Pour une investigation ponctuelle, ouvrez le détail du message ou
appelez GET /emails/{id}.
La frontière utile
Rails rend le contenu et décide quand envoyer. Spore signe, retente et protège la réputation du domaine. Cette séparation laisse moins d’infrastructure dans le projet, donc moins de choses à réparer seul un dimanche.
Continuez avec la documentation Ruby/Rails ou la
référence de sendEmail.