Product

Como o Kanban2go cumpre a Lei de Zawinski

O usuário envia uma mensagem de e-mail e você precisa recebê-la e processá-la de alguma forma. Como fazer isso? Leia mais –
Imagem para Como o Kanban2go cumpre a Lei de Zawinski

Esta publicação de blog de cliente foi escrita por Damon Cali. Damon é proprietário da Ninth Yard, criadora do TrackJumper, um aplicativo simples de rastreamento de bugs baseado na web. Ele também é o principal desenvolvedor web do kanban2go.

kanban2go

Todo programa tenta se expandir até conseguir ler e-mail. Os programas que não conseguem se expandir dessa forma são substituídos por aqueles que conseguem.

Lei de Zawinski

Não sei se isso é verdade, mas kanban2go deu um passo nessa direção recentemente com a adição de um recurso baseado em e-mail. Uma coisa que fica óbvia logo de cara é que criar um aplicativo web capaz de receber e-mails é difícil. Há muitas partes móveis, algumas das quais são grandes projetos por si só.

O usuário envia uma mensagem de e-mail, e você precisa recebê-la e processá-la de alguma forma. Como fazer isso? Você quer manter o seu próprio servidor de e-mail? Você precisa configurar caixas de correio para todos os seus usuários? E quanto a spam e entregabilidade? É o suficiente para fazer profissionais de desenvolvimento se perguntarem se vale a pena.

Encontrar uma maneira mais fácil de os usuários criarem tarefas

Esses eram os meus pensamentos quando criamos a caixa de tarefas do kanban2go. Primeiro, um pouco de contexto. O kanban2go é um aplicativo de gerenciamento de tarefas projetado em torno dos princípios do kanban. Cada usuário tem um ou mais quadros kanban virtuais, nos quais há várias “tarefas” virtuais. Você faz login, clica em “Adicionar tarefa” e obtém uma tarefa no quadro que pode editar, arrastar e com a qual pode interagir.

Queríamos melhorar as coisas fornecendo aos usuários uma maneira de enviar tarefas por e-mail para a sua conta, em vez de ter que fazer login no aplicativo. Foi quando minha cabeça começou a girar, o que geralmente é um bom indicador de que é hora de ver se outra pessoa resolveu o problema.

Bons artistas pegam emprestado. Grandes artistas roubam. Neste caso, artistas pragmáticos alugam. Felizmente, o Mailgun facilita todo esse processo. Vou expor nesta publicação como abordamos o problema na esperança de que isso sirva de gatilho para algumas ideias no seu próprio aplicativo. O código aqui não é exatamente o que usamos (é uma versão simplificada), mas as diferenças têm mais a ver com o kanban2go do que com o Mailgun.

Passo 1- Configurar o seu domínio

O primeiro passo (após se cadastrar no Mailgun) é criar e configurar o seu domínio no Mailgun.

Escolhemos usar taskbox.kanban2go.com. Dessa forma, um usuário pode enviar uma mensagem para user_abc123@taskbox.kanban2go.com (por exemplo) e fazer com que a mensagem apareça na caixa de tarefas do usuário na forma de uma tarefa do kanban2go.

A configuração de domínio é inteiramente uma questão de configurar os registros DNS do seu domínio, conforme orientação do Mailgun, e selecionar as opções desejadas no painel de controle. Há instruções explícitas no painel de controle do Mailgun para as configurações de DNS. Basta segui-las.

kanban

Para as opções, optamos por ativar o filtro de spam, bloqueando todo o spam recebido (você também poderia manter o spam, mas vamos manter a simplicidade). Como precisávamos de apenas um subdomínio, optamos por um domínio normal em vez de um domínio curinga.

kanban2

E isso é tudo para a configuração de domínio.

Passo 2- Configurar rotas para encaminhamento de e-mail

Grande parte da simplicidade do Mailgun vem do seu sistema de roteamento. Você configura rotas que informam ao Mailgun o que fazer com as mensagens que ele recebe no domínio configurado. No nosso caso, não poderia ser mais simples: queríamos que o Mailgun encaminhasse todas as mensagens enviadas para *@taskbox.kanban2go.com a um URL no nosso aplicativo, http://kanban2go.com/mailgun/receive. A ação nesse URL processará a mensagem recebida de forma apropriada.

O que é ótimo sobre as rotas é que elas oferecem suporte a expressões regulares e até mesmo captura nomeada que é repassada às ações, proporcionando uma enorme flexibilidade a você.

As rotas são configuradas na aba de rotas do painel de controle do Mailgun.

Primeiro criamos uma expressão de filtro, que você pode considerar como uma expressão regular para o Mailgun. No nosso caso, queremos corresponder a todas as mensagens enviadas para o nosso domínio.

match_recipient('.*@taskbox.kanban2go.com') A seguir, definimos uma ação que orienta o Mailgun sobre o que fazer assim que ele obtiver uma correspondência.

forward("http://kanban2go.com/mailgun/receive"), stop()

Neste caso, estamos encaminhando a mensagem para o nosso aplicativo e, em seguida, parando.

O Mailgun analisará as mensagens para você, oferecendo alguns recursos práticos, ou você pode optar por receber a mensagem bruta. Como não estamos fazendo nada sofisticado e isso nos poupa trabalho, optamos por receber as mensagens já analisadas pelo Mailgun.

É aqui que grande parte da mágica acontece. Quando o Mailgun recebe uma mensagem correspondente, ele a processa e envia uma solicitação POST ao URL fornecido na rota do Mailgun. Os parâmetros dessa solicitação incluem o remetente, o assunto, o corpo e diversas outras coisas úteis. Consulte a documentação para obter mais informações sobre as rotas.

Passo 3- Receber e-mails com Rails

Agora que temos o Mailgun nos enviando solicitações POST, precisamos configurar o nosso aplicativo Rails para lidar com elas.

No kanban2go, um usuário tem muitas tarefas. Toda tarefa tem um atributo chamado “content”, que contém o texto da tarefa.

No nosso aplicativo Rails, precisamos lidar com as solicitações POST do Mailgun em http://kanban2go.com/mailgun/receive. O primeiro passo é criar uma rota para a nossa nova ação no arquivo routes.rb.

post '/mailgun/receive' => 'mailgun#receive' A seguir, precisamos criar um MailgunController com uma ação de “receive” em mailgun_controller.rb

                                

                                    class MailgunController < ApplicationControllerrn  protect_from_forgery :except => [:receive]rn  def receivern    user = User.find_by_taskbox_address(params['recipient'])rn    stripped_text = params['stripped-text']rn    if userrn      Task.create(:user => user, :content => stripped_text)rn    endrn    render :nothing => truern  endrnend
                                
                            

Note que devemos desativar a proteção contra falsificação para a ação receive. Para obter mais informações sobre como protect_from_forgery funciona, há uma ótima explicação no Guia de Segurança do Rails.

A primeira coisa a fazer na ação de recebimento é buscar o usuário ao qual a mensagem foi enviada. Para fazer isso, atribuímos a cada usuário um endereço de e-mail exclusivo da caixa de tarefas (em um atributo “taskbox_address”) na primeira vez em que o usuário é criado. Por exemplo, um taskbox_address pode ser “hard_to_guess74623@taskbox.kanban2go.com”. O importante é que o nome de usuário do endereço deve ser exclusivo e difícil de adivinhar. Em seguida, encontramos o usuário com o método User.find_by_taskbox_address (que é enviado pelo Mailgun como o parâmetro “recipient”).

Em seguida, extraímos o parâmetro “stripped-text” da solicitação. Isso é algo que o Mailgun fornece quando analisa uma mensagem de e-mail. O “stripped-text” é apenas o corpo do e-mail, sem nenhuma parte citada ou assinatura.

Se encontrarmos um usuário, criamos uma tarefa pertencente a ele e definimos o conteúdo da tarefa como o texto extraído (stripped-text). Se não encontrarmos um usuário, nada acontece.

Passo 4- Relaxar

E é isso. E isso é tudo o que há para transformar e-mails em tarefas com o Mailgun. Claro, este é um exemplo muito simples. Dependendo das suas necessidades de segurança e privacidade, talvez seja necessário passar por algumas verificações e lógicas adicionais no seu aplicativo, mas a parte difícil é feita para você no Mailgun: o roteamento, a análise e a filtragem de spam.

Espero que isso ajude a esclarecer por que você não precisa mais ter medo do manuseio de e-mails no seu aplicativo. Há um mundo de possibilidades: basta usar a criatividade.

Você está pensando em incluir o tratamento de e-mails no seu aplicativo? Tem alguma ideia sobre a abordagem descrita aqui? Compartilhe o que achou nos comentários do blog ou participe da conversa no HackerNews.

Divulgação completa: o fundador do kanban2go.com, Prabhakar Gopalan, trabalha na Rackspace, a empresa controladora do Mailgun. O kanban2go.com é anterior ao trabalho de Prabhakar na Rackspace.