Product
Comment Kanban2go applique la loi de Zawinski
Cet article de blog client a été rédigé par Damon Cali. Damon est le propriétaire de Ninth Yard, qui a créé TrackJumper, une application web simple de suivi des bugs. Il est également développeur web principal pour kanban2go.

Chaque programme tente de s’étendre jusqu’à pouvoir lire des emails. Les programmes qui ne peuvent pas s’étendre ainsi sont remplacés par ceux qui le peuvent.
La loi de Zawinski
Je ne sais pas si c’est vrai, mais kanban2go a récemment fait un pas dans cette direction avec l’ajout d’une fonctionnalité basée sur l’email. Une chose qui devient évidente d’emblée, c’est que créer une application web capable de recevoir des emails est difficile. Il y a beaucoup d’éléments mobiles, dont certains constituent des projets majeurs à part entière.
L’utilisateur envoie un message par email, et vous devez le récupérer et le traiter d’une manière ou d’une autre. Comment y parvenir ? Voulez-vous maintenir votre propre serveur d’email ? Devez-vous configurer des messageries pour tous vos utilisateurs ? Et qu’en est-il du spam et de la délivrabilité ? Il y a de quoi pousser un développeur à se demander si cela en vaut la peine.
Trouver un moyen plus facile de créer des tâches
C’est ce que j’avais en tête lorsque nous avons créé la boîte de tâches de kanban2go. Tout d’abord, un peu de contexte. kanban2go est une application de gestion des tâches conçue autour des principes du kanban. Chaque utilisateur possède un ou plusieurs tableaux kanban virtuels, sur lesquels se trouvent plusieurs « tâches » virtuelles. Vous vous connectez, cliquez sur « Ajouter une tâche » et vous obtenez une tâche sur le tableau que vous pouvez modifier, faire glisser et avec laquelle vous pouvez interagir.
Nous voulions améliorer les choses en offrant aux utilisateurs la possibilité d’envoyer des tâches par email sur leur compte, au lieu de devoir se connecter à l’application. C’est là que j’ai commencé à avoir le tournis, ce qui est généralement un bon indicateur qu’il est temps de voir si quelqu’un d’autre a résolu le problème.
Les bons artistes empruntent. Les grands artistes volent. Dans ce cas, les artistes pragmatiques louent. Heureusement, Mailgun rend tout ce processus facile. Je vais vous expliquer dans cet article comment nous avons abordé le problème, dans l’espoir que cela vous donnera des idées pour votre propre application. Le code présenté ici n’est pas exactement celui que nous utilisons, il s’agit d’une version simplifiée, mais les différences sont davantage liées à kanban2go qu’à Mailgun.
Étape 1 – Configuration de votre domaine
La première étape (après vous être inscrit sur Mailgun) consiste à créer et à configurer votre domaine sur Mailgun.
Nous avons choisi d’utiliser taskbox.kanban2go.com. De cette façon, un utilisateur peut envoyer un message à user_abc123@taskbox.kanban2go.com (par exemple) et voir le message apparaître dans sa boîte de tâches sous la forme d’une tâche kanban2go.
La configuration du domaine consiste entièrement à paramétrer les enregistrements DNS de votre domaine selon les instructions de Mailgun et à sélectionner les options que vous souhaitez dans le panneau de contrôle. Des instructions explicites se trouvent dans le panneau de contrôle Mailgun pour les paramètres DNS. Il vous suffit de les suivre.

Pour les options, nous avons choisi d’activer le filtre anti-spam, bloquant tout spam entrant (vous pourriez aussi conserver le spam, mais restons simples). Comme nous n’avions besoin que d’un seul sous-domaine, nous avons opté pour un domaine régulier au lieu d’un domaine générique.

C’est tout pour la configuration du domaine.
Étape 2 – Configuration des règles de routage pour le transfert d’email
Une grande partie de la simplicité de Mailgun vient de son système de routage. Vous configurez des règles de routage qui indiquent à Mailgun quoi faire avec les messages qu’il reçoit sur le domaine que vous avez configuré. Dans notre cas, ce n’est pas plus compliqué : nous voulions que Mailgun transfère tous les messages envoyés à *@taskbox.kanban2go.com vers une URL de notre application : http://kanban2go.com/mailgun/receive. L’action à cette URL traitera le message entrant de manière appropriée.
Ce qui est génial avec les règles de routage, c’est qu’elles prennent en charge les expressions régulières et même la capture nommée qui sont transmises aux actions, ce qui vous offre une grande flexibilité.
Les règles de routage sont configurées dans l’onglet Routes du panneau de contrôle Mailgun.
Nous créons d’abord une expression de filtre, que l’on peut considérer comme une expression régulière pour Mailgun. Dans notre cas, nous voulons correspondre à chaque message envoyé à notre domaine.
match_recipient('.*@taskbox.kanban2go.com') Ensuite, nous définissons une action qui indique à Mailgun quoi faire lorsqu’il obtient une correspondance.
forward("http://kanban2go.com/mailgun/receive"), stop()
Dans ce cas, nous transférons le message à notre application, puis nous nous arrêtons.
Mailgun analysera les messages pour vous, offrant ainsi des fonctionnalités pratiques, ou bien vous pouvez choisir de recevoir le message brut. Comme nous ne faisons rien de fantaisiste et que cela nous épargne du travail, nous avons choisi de recevoir les messages tels qu’analysés par Mailgun.
C’est là qu’une grande partie de la magie opère. Lorsque Mailgun reçoit un message correspondant, il le traite et envoie une requête POST à l’URL indiquée dans la règle de routage Mailgun. Les paramètres de cette requête incluent l’expéditeur, l’objet, le corps et tout un tas d’autres éléments utiles. Consultez la documentation pour plus d’informations sur le routage.
Étape 3 – Réception des emails avec Rails
Maintenant que Mailgun nous envoie des requêtes POST, nous devons configurer notre application Rails pour les traiter.
Dans kanban2go, un utilisateur a de nombreuses tâches. Chaque tâche possède un attribut nommé « content » qui contient le texte de la tâche.
Dans notre application Rails, nous devons traiter les requêtes POST provenant de Mailgun à l’adresse http://kanban2go.com/mailgun/receive. La première étape consiste à créer une route pour notre nouvelle action dans routes.rb.
post '/mailgun/receive' => 'mailgun#receive' Ensuite, nous devons créer un MailgunController avec une action « receive » dans 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
Notez que nous devons désactiver la protection contre les falsifications pour l’action de réception. Pour plus d’informations sur le fonctionnement de protect_from_forgery, vous trouverez une excellente explication dans le Guide de sécurité Rails.
La première chose à faire dans l’action de réception est de récupérer l’utilisateur à qui le message a été envoyé. Pour ce faire, nous attribuons à chaque utilisateur une adresse email de boîte de tâches unique (dans un attribut « taskbox_address ») lors de sa création. Par exemple, une taskbox_address pourrait être « hard_to_guess74623@taskbox.kanban2go.com ». L’important est que le nom d’utilisateur de l’adresse soit unique et difficile à deviner. Nous trouvons ensuite l’utilisateur avec la méthode User.find_by_taskbox_address (cette information est envoyée par Mailgun en tant que paramètre ‘recipient’).
Ensuite, nous extrayons le paramètre « stripped-text » de la requête. C’est un élément que Mailgun fournit lorsqu’il analyse un message par email. Le « stripped-text » correspond simplement au corps de l’email sans aucune partie citée ni signature.
Si nous trouvons un utilisateur, nous créons une tâche lui appartenant et définissons le contenu de cette tâche sur le texte extrait. Si nous ne trouvons pas d’utilisateur, rien ne se passe.
Étape 4 – Détendez-vous
Et c’est tout. C’est tout ce qu’il y a à faire pour transformer des emails en tâches avec Mailgun. Bien sûr, il s’agit d’un exemple très simple. En fonction de vos besoins en matière de sécurité et de confidentialité, vous devrez peut-être passer par des vérifications et une logique supplémentaires dans votre application, mais le plus difficile est géré pour vous par Mailgun : le routage, l’analyse et le filtrage anti-spam.
J’espère que cela vous aidera à comprendre pourquoi vous n’avez plus besoin de craindre les emails dans votre application. Il y a tout un monde de possibilités : laissez parler votre créativité.
Envisagez-vous d’intégrer la gestion des emails dans votre application ? Avez-vous des commentaires sur l’approche décrite ici ? Partagez votre avis dans les commentaires du blog ou rejoignez la conversation sur HackerNews.
Transparence totale : le fondateur de kanban2go.com, Prabhakar Gopalan, travaille chez Rackspace, la société mère de Mailgun. kanban2go.com est antérieur au travail de Prabhakar chez Rackspace.