É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

Cet article est écrit par Anthony Eden, fondateur et développeur chez DNSimple. DNSimple est le moyen sans tracas de gérer tous vos domaines en un seul endroit sans avoir à cliquer sur 10 écrans de ventes incitatives pour effectuer un simple achat. En plus des services de registraire, DNSimple propose une API REST pour créer et gérer des domaines et des enregistrements. Ils facilitent également la réception d'emails sur votre domaine et leur transfert vers tout autre compte email, comme un alias d'email que vous avez configuré pour gérer les emails de support ou de facturation, ou un service de messagerie externe comme Gmail.

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. »
Photo of Paulius Milisauskas
Paulius Milisauskas Vice-président des opérations clients
Tenez-moi au courant ! Recevez d’excellentes ressources dans votre boîte de réception chaque semaine.
Envoyez-moi la newsletter Mailjet. J’accepte expressément de recevoir la newsletter et je sais que je peux facilement me désabonner à tout moment.

Découvrez la newsletter de Mailjet chaque mois dans votre boîte de réception.