PostmailRuby

PostmailRuby est une gem Ruby qui fournit un mécanisme flexible d’envoi d’e‑mails pour Ruby on Rails ou tout projet utilisant Action Mailer. La gem propose deux méthodes d’expédition : soit par SMTP, soit par une API HTTP. Tous les paramètres de connexion et le choix de la méthode d’envoi se pilotent via des variables d’environnement afin de simplifier la configuration lors du déploiement.

Installation

Dans votre Gemfile, ajoutez :

gem "postmail_ruby", '~> 0.1.3'

Puis exécutez bundle install pour installer la gem.

Utilisation dans Rails

PostmailRuby enregistre deux méthodes de livraison personnalisées pour Action Mailer : :postmail_smtp et :postmail_api. La gem est livrée avec un Railtie qui détecte Rails et configure automatiquement Action Mailer en fonction des variables d’environnement ci‑dessous. En pratique, il suffit de définir vos variables d’environnement et de vous assurer que la gem est chargée.

Si vous souhaitez configurer explicitement la gem (par exemple hors de Rails), vous pouvez appeler :

require "postmail_ruby"
PostmailRuby.configure

Cette méthode lit les variables d’environnement, enregistre les méthodes de livraison et définit la méthode d’envoi par défaut (delivery_method) sur Action Mailer.

Variables d’environnement

Toutes les options de configuration se font via des variables d’environnement, ce qui permet de modifier le comportement sans changer le code. Voici les variables reconnues :

Variable Description Valeur par défaut
POSTMAIL_DELIVERY_METHOD Choix de la méthode d’envoi : smtp (envoi via serveur SMTP) ou api (envoi via appel HTTP). smtp
POSTMAIL_DISABLE_RAILS_SMTP Lorsque défini à true, PostmailRuby désactive les paramètres SMTP par défaut de Rails (ActionMailer::Base.smtp_settings) pour éviter des retours en arrière accidentels. Utiliser cette option est recommandé si vous envoyez exclusivement via l’API. false
POSTMAIL_API_ENDPOINT URL complète de l’endpoint HTTP pour l’envoi par API (par exemple https://postal.exanora.com/api/v1/send/message). Obligatoire si POSTMAIL_DELIVERY_METHOD=api.
POSTMAIL_API_KEY Clé d’API utilisée pour authentifier les requêtes HTTP (envoyée dans l’en‑tête X-Server-API-Key).
POSTMAIL_API_TIMEOUT Temps d’attente maximum en secondes lors de l’appel HTTP. 10
POSTMAIL_SMTP_HOST Nom d’hôte du serveur SMTP (ex : smtp.exemple.com). Obligatoire si POSTMAIL_DELIVERY_METHOD=smtp.
POSTMAIL_SMTP_PORT Port du serveur SMTP. 587
POSTMAIL_SMTP_USERNAME Nom d’utilisateur pour l’authentification SMTP. Laisser vide pour une connexion sans authentification. nil
POSTMAIL_SMTP_PASSWORD Mot de passe pour l’authentification SMTP. nil
POSTMAIL_SMTP_AUTHENTICATION Type d’authentification SMTP : plain, login ou cram_md5. plain
POSTMAIL_SMTP_ENABLE_STARTTLS_AUTO Active STARTTLS. Mettre false pour désactiver. true
POSTMAIL_SMTP_SSL Lorsque défini à true, PostmailRuby établit une connexion SSL/TLS implicite (comme un port 465). false
POSTMAIL_SMTP_OPEN_TIMEOUT Durée maximale (en secondes) pour établir la connexion SMTP. 30
POSTMAIL_SMTP_READ_TIMEOUT Durée maximale (en secondes) pour la lecture des réponses SMTP. 30

Désactiver le SMTP par défaut de Rails

Rails utilise un mécanisme SMTP par défaut si aucune méthode d’envoi n’est explicitement configurée. Pour éviter toute utilisation accidentelle du SMTP intégré lorsque vous utilisez Postmail, définissez :

POSTMAIL_DISABLE_RAILS_SMTP=true

Lorsque cette variable est à true, PostmailRuby réinitialise ActionMailer::Base.smtp_settings à un hash vide et définit ActionMailer::Base.delivery_method sur :postmail_api ou :postmail_smtp en fonction de POSTMAIL_DELIVERY_METHOD.

Exemple de configuration

Pour envoyer via l’API HTTP :

POSTMAIL_DELIVERY_METHOD=api
POSTMAIL_API_ENDPOINT=https://postal.exanora.com/api/v1/send/message
POSTMAIL_API_KEY=your_api_key
POSTMAIL_DISABLE_RAILS_SMTP=true

Pour envoyer via SMTP :

POSTMAIL_DELIVERY_METHOD=smtp
POSTMAIL_SMTP_HOST=smtp.exemple.com
POSTMAIL_SMTP_PORT=2587
POSTMAIL_SMTP_USERNAME=user
POSTMAIL_SMTP_PASSWORD=secret
POSTMAIL_SMTP_AUTHENTICATION=login
POSTMAIL_SMTP_ENABLE_STARTTLS_AUTO=true
POSTMAIL_DISABLE_RAILS_SMTP=false

Fonctionnement

Lorsque la méthode d’envoi est api, PostmailRuby sérialise votre message et l’envoie en POST vers l’endpoint HTTP. Le corps de la requête est JSON et inclut les adresses, le sujet, les corps texte/HTML et les pièces jointes (encodées en Base64). La clé API est transmise via l’en‑tête X-Server-API-Key.

Lorsque la méthode d’envoi est smtp, PostmailRuby utilise les paramètres SMTP renseignés pour établir la connexion avec le serveur de messagerie via la gem mail. Les options SSL/TLS, timeouts et authentification sont héritées des variables d’environnement.

Contribuer

Les demandes d’amélioration et les rapports de bogue sont les bienvenus ! Ouvrez une issue ou une pull request sur GitHub à l’adresse https://github.com/votrecompte/postmail.

Licence

Ce projet est distribué sous licence MIT. Voir le fichier LICENSE pour plus de détails.