Estudos de caso

Como o DNSimple baseado em Ruby usa a API do Mailgun para criar & configurar domínios para encaminhamento de e-mail

Este post foi escrito por Anthoy Eden, fundador e desenvolvedor, no DNSimple. O DNSimple é a maneira sem complicações de gerenciar todos os seus domínios em um único lugar, sem precisar clicar em 10 telas de vendas adicionais para concluir uma compra simples. Além dos serviços de registrador, o DNSimple oferece uma API REST para criar e gerenciar domínios e registros. Eles também facilitam o recebimento de e-mail no seu domínio e o encaminhamento para qualquer outra conta de e-mail, como um alias de e-mail que você configurou para lidar com e-mails de suporte ou faturamento, ou um provedor de e-mail externo, como o Gmail.

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.”
Photo of Paulius Milisauskas
Paulius Milisauskas Vice-presidente de Operações de Clientes
Mantenha-me informado! Receba ótimos recursos em sua caixa de entrada toda semana.
Envie-me a newsletter da Mailjet. Eu concordo expressamente em receber a newsletter e sei que posso cancelar a inscrição facilmente a qualquer momento.

Verifique sua caixa de entrada mensalmente para receber sua newsletter da Mailjet!