Études de cas
Comment le service DNSimple basé sur Ruby utilise l’API de Mailgun pour créer et configurer des domaines pour le transfert d’emails
Chez DNSimple, nous aimons les DNS d’une manière presque malsaine. Ce que nous n’aimons pas, en revanche, c’est la gestion des serveurs d’emails. Plus tôt cette année, nous avons décidé d’ajouter le transfert d’emails comme l’un des services que nous offrons à nos clients, et compte tenu de notre aversion pour la gestion de serveurs d’emails, nous avons cherché un fournisseur avec une API agréable que nous pourrions facilement intégrer. Grâce aux recommandations sur Twitter, nous avons fini par trouver et choisir Mailgun et nous avons été ravis de voir à quel point il nous a été facile de l’intégrer et de le maintenir.
Création et configuration de domaines de manière programmatique
Notre application web est développée avec Ruby on Rails, l’intégration de Mailgun a donc été un jeu d’enfant.
Nous utilisons HTTParty, un petit gem Ruby sympa de John Nunemaker, pour communiquer avec l’API de Mailgun. Tout d’abord, nous configurons une classe qui est notre client :
require 'httparty'
class Mailgun
class MailgunError < StandardError
end
include HTTParty
base_uri 'https://api.mailgun.net/v2'
basic_auth 'api', C_.mailgun_api_key
end
Une fois que nous avons cette classe, nous pouvons faire appel à l’API pour démarrer notre processus de création et de configuration programmatiques de nouveaux domaines personnalisés que nos clients utiliseront pour le transfert d’emails.
mailgun_domain_res = Mailgun.get("/domains/#{domain.unicode_name}")
if mailgun_domain_res.code != 200
mailgun_domain_res = Mailgun.post('/domains', :body => {:name => domain.unicode_name, :smtp_password => smtp_password})
# if created then increment the count
if mailgun_domain_res.code == 200
increment_email_forwarding(domain)
else
raise "Failed to create domain in Mailgun"
end
end
Dans ce cas, nous vérifions d’abord si un domaine existe dans Mailgun. S’il existe déjà, nous pouvons passer à l’étape suivante. S’il n’existe pas, nous le créons en invoquant une requête POST sur la ressource /domains. Nous passons le nom et un mot de passe SMTP. Si le domaine a été créé avec succès, nous incrémentons le compteur de transfert d’emails pour le client puisque nous facturons par domaine. Si c’est la première fois que nous créons le domaine, nous ajoutons également des enregistrements MX pour l’envoi automatique pour nos clients, ainsi que l’enregistrement SPF approprié qui augmente la délivrabilité.
Configuration du transfert d’emails basée sur une correspondance d’expression régulière
Ensuite, nous configurons le transfert d’emails que le client a demandé (par exemple, transférer les emails de info@mycompany.com vers paul@mycompany.com). Dans Mailgun, cette fonctionnalité est appelée une « route » car elle décrit comment router un message. Dans notre cas, nous voulons router sur la base d’une expression régulière fournie par le client et transférer le domaine vers l’adresse email de destination qu’il a choisie :
mailgun_route_res = Mailgun.post("/routes", body: {
description: "Email forwarding",
expression: %Q(match_recipient('#{email_forward_attributes[:from]}')),
action: %Q(forward('#{email_forward_attributes[:to]}'))
})
mailgun_route = Hashie::Mash.new(mailgun_route_res.parsed_response)
if mailgun_route_res.code != 200
raise Mailgun::MailgunError, mailgun_route.message
end
Si la route ne peut pas être configurée, nous levons une erreur, sinon nous retournons la route Mailgun. Une fois que nous avons une route, nous stockons le route_identifier dans notre base de données et c’est tout !
Si un client décide de supprimer des routes, nous pouvons simplement les supprimer via l’API :
mailgun_route_res = Mailgun.delete("/routes/#{email_forward.route_identifier}")
Et s’ils n’ont plus de routes, nous supprimons également le domaine du système Mailgun :
mailgun_domain_res = Mailgun.delete("/domains/#{domain.unicode_name}")
decrement_email_forwarding(domain)
Conclusion
Comparé à la douleur et à la frustration de devoir exploiter et maintenir un système de stockage et de livraison d’emails en pleine croissance, Mailgun offre un moyen extrêmement simple de configurer des emails pour nos clients, et nous les aimons pour cela.
« L’utilisation de Mailgun nous permet d’assurer un meilleur service à nos marketeurs. Ils comptent sur nous, et nous comptons sur Mailgun : et cette relation nous aide à maintenir notre crédibilité auprès de nos clients. »