Fallstudien

Wie das Ruby-basierte DNSimple die Mailgun-API nutzt, um Domains für die E-Mail-Weiterleitung zu erstellen & einzurichten

Dieser Beitrag wurde von Anthoy Eden, Gründer und Entwickler bei DNSimple, verfasst. DNSimple ist der unkomplizierte Weg, all Ihre Domains an einem einzigen Ort zu verwalten, ohne sich durch 10 Bildschirme mit Upsells klicken zu müssen, um einen einfachen Kauf abzuschließen. Zusätzlich zu Registrar-Diensten bietet DNSimple eine REST-API zum Erstellen und Verwalten von Domains und Einträgen. Sie machen es zudem einfach, E-Mails über Ihre Domain zu empfangen und an ein beliebiges anderes E-Mail-Konto weiterzuleiten, wie beispielsweise ein E-Mail-Alias, das Sie zur Bearbeitung von Support- oder Abrechnungs-E-Mails eingerichtet haben, oder an einen externen E-Mail-Anbieter wie Gmail.

Wir bei DNSimple lieben DNS auf fast schon ungesunde Weise. Was wir jedoch nicht lieben, ist die Verwaltung von E-Mail-Servern. Anfang dieses Jahres haben wir beschlossen, E-Mail-Weiterleitung als einen der Dienste hinzuzufügen, die wir unseren Kunden anbieten, und angesichts unserer Abneigung gegenüber der Verwaltung von E-Mail-Servern haben wir nach einem Anbieter mit einer guten API gesucht, die wir leicht integrieren konnten. Dank Empfehlungen auf Twitter haben wir schließlich Mailgun gefunden und uns dafür entschieden, und wir sind begeistert, wie einfach es für uns war, es zu integrieren und zu warten.

Programmgesteuertes Erstellen und Konfigurieren von Domains

Unsere Webanwendung wurde mit Ruby on Rails entwickelt, daher war die Integration von Mailgun ein Kinderspiel.

Wir verwenden HTTParty, ein praktisches kleines Ruby-Gem von John Nunemaker, um mit der Mailgun-API zu kommunizieren. Zuerst richten wir eine Klasse ein, die unser Client ist:

                            

                                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
                            
                        

Sobald wir diese Klasse haben, können wir die API aufrufen, um unseren Prozess zum programmgesteuerten Erstellen und Konfigurieren neuer benutzerdefinierter Domains zu starten, die unsere Kunden zur Weiterleitung von E-Mails nutzen können.

                            

                                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
                            
                        

In diesem Fall prüfen wir zunächst, ob eine Domain in Mailgun existiert. Wenn sie bereits existiert, können wir zum nächsten Schritt übergehen. Wenn sie nicht existiert, erstellen wir sie durch den Aufruf einer POST-Anfrage an die Ressource /domains. Wir übergeben den Namen und ein SMTP-Passwort. Wenn die Domain erfolgreich erstellt wurde, erhöhen wir die Anzahl der E-Mail-Weiterleitungen für den Kunden, da wir pro Domain abrechnen. Wenn wir die Domain zum ersten Mal erstellen, fügen wir für unsere Kunden auch automatisch MX-Einträge für den Versand sowie den entsprechenden SPF-Eintrag hinzu, was die Zustellbarkeit erhöht.

Einrichten der E-Mail-Weiterleitung basierend auf Regex-Übereinstimmungen

Als Nächstes richten wir die vom Kunden angeforderte E-Mail-Weiterleitung ein (z. B. Weiterleitung von E-Mails an info@mycompany.com zu paul@mycompany.com). In Mailgun wird diese Funktion als „Route“ bezeichnet, da sie beschreibt, wie eine Nachricht geroutet wird. In unserem Fall möchten wir das Routing basierend auf einem vom Kunden bereitgestellten regulären Ausdruck durchführen und die Domain an die von ihm gewählte Ziel-E-Mail-Adresse weiterleiten:

                            

                                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
                            
                        

Wenn die Route nicht eingerichtet werden kann, geben wir einen Fehler aus, ansonsten geben wir die Mailgun-Route zurück. Sobald wir eine Route haben, speichern wir den route_identifier in unserer Datenbank und das war’s!

Wenn ein Kunde beschließt, Routen zu entfernen, können wir sie einfach über die API löschen:

                            

                                mailgun_route_res = Mailgun.delete("/routes/#{email_forward.route_identifier}")
                            
                        

Und wenn er keine Routen mehr hat, entfernen wir auch die Domain aus dem Mailgun-System:

                            

                                mailgun_domain_res = Mailgun.delete("/domains/#{domain.unicode_name}")
decrement_email_forwarding(domain)
                            
                        

Fazit

Verglichen mit den Mühen und der Frustration, ein wachsendes E-Mail-Speicher- und Zustellungssystem betreiben und warten zu müssen, bietet Mailgun eine extrem einfache Möglichkeit, E-Mails für unsere Kunden einzurichten, und dafür lieben wir sie.

„Durch den Einsatz von Mailgun können wir einen besseren Service für unsere Marketer gewährleisten. Sie zählen auf uns, und wir zählen auf Mailgun: und diese Beziehung hilft uns, die Glaubwürdigkeit bei unseren Kunden zu erhalten.“
Photo of Paulius Milisauskas
Paulius Milisauskas VP Kundenbetrieb
Bleiben Sie informiert! Erhalten Sie jede Woche wertvolle Inhalte direkt in Ihr Posteingang.
Senden Sie mir den Mailjet-Newsletter. Ich bin mit dem Erhalt des Newsletters einverstanden und weiß, dass ich mich jederzeit unkompliziert wieder abmelden kann.

Prüfen Sie Ihren Posteingang jeden Monat auf Ihren Mailjet Newsletter!