KontactMe

By antho1404 • work • 3 Jun 2013

Non ne vous inquiétez pas ce titre n’a rien d’un appel a l’aide et je n’ai pas oublié comment écrire contact. Ce titre est juste le nom donné à un nouveau web-service que j’ai sorti et tout comme Mailchecker je vais vous présenter un peu les raisons et comment j’ai mis en place tout ça.

Tout d’abords, il faut savoir qu’en développant des sites web pour des clients, il y a énormément de fois une requête commune… un formulaire de contact. Alors vous direz pour ceux qui lisent cet article et qui codent un peu, c’est pas compliqué à faire et pas non plus forcément super long à mettre en place. Là-dessus je dirais oui vous avez tout à fait raison. Par exemple en Ruby on Rails ce genre de dev va demander a tout casser 15min mais moi ce temps passé pour cette tâche totalement inintéressante et sans aucune difficulté était du temps perdu. De plus d’autre petits “soucis” arrivent lorsqu’on veut faire un formulaire de contact “classique”. Que se passe t-il si on veut changer l’adresse de destination ou encore que l’on veut avoir quelques stats sur nos mails reçus par là où encore regrouper plusieurs contacts de différents sites… enfin plein de petits détails comme ça qui ne sont certes pas très grave mais qui peuvent dans certains cas êtres ennuyeux.

Du coup je me suis dit pourquoi ne pas déléguer tout ça à un service qui se chargerait de tout ça et que je pourrais intégrer en quelques secondes seulement et avec le minimum de lignes possibles pour éviter d’avoir des 10ènes de lignes supplémentaires à maintenir et à tester. Me voilà donc partis pour créer http://kontactme.com/ avec pour but principal, une simple api où l’on POSTerais un message et ce message serait automatiquement délivré par email en se chargeant de toute la configuration nécessaire pour ça. Du coup grâce à cela, pour des applications relativement simple, pas besoin de devoir configurer la gestion des mails et aussi et surtout avoir un petit dashboard de tout ce qu’il se passe au niveau de mon ou mes site(s) avec des formulaires de contact.

Pour la technique, c’est quelque chose d’extrêmement simple, une simple api en Ruby on Rails pour simplement créer des ressources message qui une fois sauvegardés enverrons automatiquement un mail au destinataire donné. Pour vous donner une petite idée voilà le source code du model message suivis du controller de l’api.

class Message < ActiveRecord::Base 
  belongs_to :application 
  attr_accessible :content, :email, :title, :name 
  after_create :send_mail 
  validates_presence_of :email, :content 
  mailchecker :email 
  default_scope -> { order("created_at DESC") }
 
  def send_mail
    MessageMailer.created(self).deliver
  end
end
require "addressable/uri"
 
class MessagesController < InheritedResources::Base
  protect_from_forgery except: :create
  respond_to :json
  belongs_to :application
  before_filter :check_authorization
 
  def check_authorization
    app = Application.arel_table
    domain = Addressable::URI.parse(request.env['HTTP_ORIGIN']).host
 
    dev_mode = app[:dev].eq true
    valid_domain = app[:domain].eq(domain).and(app[:dev].eq(false))
    valid_token = app[:token].eq params[:application_id]
 
    cond = valid_token.and(valid_domain.or(dev_mode))
 
    headers["Access-Control-Allow-Origin"] = "*"
    headers["Access-Control-Allow-Methods"] = "*"
    headers['Access-Control-Allow-Headers'] = "*"
    unless Application.where(cond).exists?
      render json: { errors: "not authorized" }, status: :not_authorized and return
    end
  end
end

Voilà vraiment rien de bien compliqué, on notera la présence de la gem addressable pour extraire le domaine d’où provient la requête, la gem inherited_resources pour ne rien avoir à écrire dans son controller (j’adore cette gem <3) et la gem mailchecker qui permet de valider l’email en 3 différentes étapes et de réduire grandement les adresses email non utilisées (oui oui ça utilise le service mailchecker, autant les interconnecter :) ).

Après tout ça, pas plus de 2h pour créer et tester tout ça, mon api était dispo, du coup petit boulot pour faire un petit plugin jquery qui se chargera de balancer automatiquement toutes les infos à l’api et le tour est joué. Une petite interface faite à la vas vite je vous l’accorde, d’ailleurs si quelqu’un se propose pour me sortir un design sympa je suis preneur au moins pour la home page car le dashboard passe à peu près :p. Voilà un petit web-service terminé qui pourra vous faire gagner un peu de temps et vous apporter quelques détails supplémentaires par rapport à un développement fait a la mano.

N’hésitez pas à venir le tester le service, pour l’instant c’est gratuit, mais étant donné que ça utilise Sendgrid, les emails sont payant à partir d’une certaine limite du coup ça pourra devenir payant suivant l’utilisation. Dans tous les cas les tarifs seront moins élevés que les tarifs de Sendgrid (plusieurs personnes pour un même quota du coup les prix divisés ;) ) mais bon à moins que vos utilisateurs s’amusent à vous spammer dans vos formulaires de contact il ne devrait pas y avoir de soucis là-dessus. Enfin voilà, n’hésitez pas à me donner vos retours, bon et surtout mauvais.

 

Tags: , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>