Mailchecker.com

By antho1404 • work • 16 May 2013
MailChecker - The easiest way to validate your emails !

MailChecker

Il y a quelque temps, j’ai sorti une web service tout simple (http://mail-checker.com/) permettant de tester les adresses email de vos utilisateur et qui vous dit si oui ou non il sera joignable sur cette adresse email.

Ici je vais faire un petit résumé de la raison pour laquelle j’ai mis en place ce service et surtout de comment je l’ai mis en place.

Les raisons:

Dans un premier temps c’était tout simplement pour me faire gagner du temps et éviter de refaire pour chaque projets sur lesquels je travaillait les même manip’ du coup je voulais déléguer toute la vérification des emails à une partie externe qui pourrait évoluer indépendamment et qui du coup ferait profiter tous les projets qui l’utilisent des mise à jours avec 0 maintenance.

Lorsque je m’étais lancé dans l’aventure Quidizz, nous étions confrontés à des utilisateurs qui s’inscrivaient avec des adresse mails temporaire juste pour profiter de points cadeaux à l’inscription mais ce qui nous empêchait de les recontacter ou autre ce qui était très chiant énervant. En effet beaucoup de service tels que yopmail, 10minutesmail… fournissent une adresse email juste le temps de l’inscription qui s’autodétruit généralement au bout de quelques heures voir quelques minutes. Comme lorsqu’un site se lance et essaie de récupérer des adresse emails c’est très souvent pour pouvoir recontacter ses utilisateurs pas la suite, de tels adresses sont tout simplement inutiles et pourrissent votre base de donnée d’utilisateurs si vous avez vraiment besoin de créer une relation avec eux.

Pour ces deux raisons là je voulais du coup sortir un webservice qui permettrait d’allier maintenance facile et taux maximum d’adresse email valides et de là est sorti http://mail-checker.com/.

Comment?

Déjà pour donner un ordre d’idée, le web service en lui même n’a pas été très long à développé (tout au plus une journée pour la base principale).

Il repose sur une base Rails pour gérer les utilisateurs et les applications puis pour la partie api je voulais éviter la “lourdeur” de Rails du coup je suis parti sur du Sinatra. Les deux parties étant réunies dans une seule et même application.

Alors pour faire cela il suffit de créer une application Rails standard d’inclure dans votre Gemfile la gem “sinatra” et de créer dans votre dossier lib votre api avec Sinatra puis pour faire le lien entre les deux juste une ligne à ajouter dans votre fichier routes.rb

  match 'mon_url', to: MaClasseSinatraBase

Grâce à cela, dès que l’url “mon_url” sera appelé l’application effectuera le routage sur votre fichier sinatra qui hérite de Sinatra::Base.

Voila pour la première partie.

Dans un second temps, il fallait sécuriser l’api et faire en sorte qu’elle soit accessible de n’importe quel domaine. Pour ça je vous invite à voir l’article ici.

Bien sûr avec une petite couche supplémentaire qui autorise seulement l’accès si le nom de domaine est enregistré pour l’application qui fait l’appel.

Dernier point, ben la vérification des emails. Pour ça, pour l’instant ça se passe en trois étapes.

  1. La validation du format. Très simple, une regex qui valide si l’adresse email a un format d’adresse email ou pas.
  2. Un test sur le domaine pour savoir s’il est accessible. Si jamais un domaine n’est pas accessible on peut faire une croix sur l’email… Du coup ici petit coup de pouce de la class Resolv de Ruby et hop on sait si le serveur de mail du domaine répond ou pas.
  3. Dernier point, si tous les suivant sont passé, on teste si c’est une adresse temporaire ou pas. Pour ça pas vraiment de moyen de tester directement par contre il suffit de blacklister tous les nom de domaines qui correspondent à des adresse temporaires. Une petite requête sur la base de donnée et c’est réglé.

Pour tester si le domaine répond (le point 2) voici le petit bout de code utilisé:

require 'resolv'
 
def domain_available? domain
  mx = []
  Resolv::DNS.open do |dns|
    mx = dns.getresources domain, Resolv::DNS::Resource::IN::MX
    mx.push(*dns.getresources(domain, Resolv::DNS::Resource::IN::A))
  end
  mx.size > 0
end

Pour le reste rien qu’il ne vaille vraiment la peine d’être expliqué mais n’hésitez pas à poser des questions si vous voulez plus de détails.

Quoi qu’il en soit, je vous invite à utiliser ce service, pour l’instant il est en beta et a en base de donnée près d’une 100ène de domaines blacklistés et pour l’instant aussi c’est gratuit sachant que comme pour beaucoup de services, les prix seront variables en fonction de la charge nécessaire.

Et en prime vous avez le droit à une gem à intégrer dans votre Gemfile pour faire ces test côté serveur et/ou côté client ici et un petit plugin jQuery côté clients si vous n’utilisez pas Rails ici. Que demander de plus… A oui une doc http://mail-checker.com/#howto ;)

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>