Estudos de caso
Como o DNSimple baseado em Ruby usa a API do Mailgun para criar & configurar domínios para encaminhamento de e-mail
No DNSimple, nós amamos o DNS de uma forma quase doentia. O que não amamos, no entanto, é gerenciar servidores de e-mail. No início deste ano, decidimos adicionar o encaminhamento de e-mail como um dos serviços que oferecemos aos nossos clientes e, dada a nossa aversão ao gerenciamento de servidores de e-mail, fomos em busca de um provedor com uma boa API que pudéssemos integrar facilmente. Graças às recomendações no Twitter, acabamos encontrando e escolhendo o Mailgun, e estamos entusiasmados com a facilidade de integração e manutenção.
Criando e configurando domínios programaticamente
Nosso aplicativo da web é desenvolvido usando Ruby on Rails, portanto, integrar o Mailgun foi muito fácil.
Usamos o HTTParty, uma excelente e pequena gem do Ruby criada por John Nunemaker, para nos comunicarmos com a API do Mailgun. Primeiro, configuramos uma classe que é o nosso cliente:
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
Depois de termos essa classe, podemos chamar a API para iniciar nosso processo de criação e configuração programática de novos domínios personalizados para nossos clientes usarem para o encaminhamento de e-mails.
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
Nesse caso, primeiro verificamos se um domínio existe no Mailgun. Se já existir, podemos passar para a próxima etapa. Se não existir, nós o criamos invocando uma solicitação POST para o recurso /domains. Passamos o nome e uma senha SMTP. Se o domínio foi criado com sucesso, incrementamos a contagem de encaminhamento de e-mail para o cliente, já que o faturamento é feito por domínio. Se esta for a primeira vez que criamos o domínio, também adicionamos registros MX para envio automático para nossos clientes, bem como o registro SPF apropriado, que aumenta a entregabilidade.
Configurando o encaminhamento de e-mail com base em correspondência de regex
Em seguida, configuramos o encaminhamento de e-mail solicitado pelo cliente (por exemplo, encaminhar e-mails de info@mycompany.com para paul@mycompany.com). No Mailgun, esse recurso é chamado de “rota”, porque descreve como realizar o roteamento de uma mensagem. No nosso caso, queremos fazer o roteamento com base em uma expressão regular fornecida pelo cliente e encaminhar o domínio para o endereço de e-mail de destino que ele escolher:
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
Se a rota não puder ser configurada, geramos um erro; caso contrário, retornamos a rota do Mailgun. Assim que tivermos uma rota, armazenamos o route_identifier em nosso banco de dados e pronto!
Se um cliente decidir remover rotas, podemos simplesmente excluí-las pela API:
mailgun_route_res = Mailgun.delete("/routes/#{email_forward.route_identifier}")
E se eles não tiverem mais rotas, também removemos o domínio do sistema do Mailgun:
mailgun_domain_res = Mailgun.delete("/domains/#{domain.unicode_name}")
decrement_email_forwarding(domain)
Conclusão
Em comparação com a dor e a frustração de ter que operar e manter um sistema crescente de armazenamento e entrega de e-mail, o Mailgun fornece uma maneira extremamente simples de configurar o e-mail para nossos clientes, e nós os adoramos por isso.
“Conseguimos garantir melhor atendimento aos nossos profissionais de marketing usando o Mailgun. Eles contam conosco, e nós contamos com o Mailgun: e esse relacionamento nos ajuda a manter a credibilidade com nossos clientes.”