L'une des fonctionnalités les plus utilisées de TeamworkPM est la possibilité de répondre aux notifications par e-mail et d'ajouter votre commentaire à votre projet. Les pièces jointes que vous envoyez via la réponse par e-mail seront également ajoutées au commentaire et affichées dans l'onglet Fichiers de votre projet. L'un de mes principaux domaines au sein de l'équipe de développement est le traitement des e-mails. Si un e-mail est envoyé à Teamwork, je suis celui qui fait que tout fonctionne. Le courrier électronique étant la méthode de communication, de nombreux «problèmes» doivent être résolus de notre côté. Celles-ci incluent la gestion des e-mails texte / HTML, l'analyse du bit «réponse» et l'élimination du contenu cité de la notification d'origine, la validation de l'utilisateur qui envoie la réponse, l'enregistrement des pièces jointes, etc. Dans cet article, j'ai pensé qu'il serait intéressant de se concentrer sur l'un des défis auxquels nous avons été confrontés lors de la gestion des pièces jointes et de la solution que nous avons mise en œuvre: les images de signature.

Un peu de contexte

Lorsque nous avons lancé Teamwork pour la première fois, les notifications par e-mail étaient à sens unique. Vous ne pouviez recevoir que des notifications, mais nous n'avons pas accepté les réponses. Vous deviez vous connecter à Teamwork pour répondre à un message ou un commentaire. Les gens sont habitués à envoyer des e-mails et s'attendent à pouvoir répondre aux e-mails. Nous avons ajouté la possibilité de répondre aux notifications par e-mail et d'ajouter la réponse en tant que commentaire ou message sur votre projet. À l'époque, vous pouviez ajouter un commentaire sur Teamwork, mais vous ne pouviez pas joindre de fichiers au commentaire. En raison de cette limitation, nous avions l'habitude d'ignorer toutes les pièces jointes lors du traitement des e-mails. Au fur et à mesure que Teamwork progressait, nous avons ajouté la possibilité de joindre des fichiers aux commentaires dans Teamwork. Cela signifie que nous pouvons désormais traiter les pièces jointes des réponses par e-mail. Fantastique! Les gens ont adoré… Mais un nouveau problème est survenu: les images de signature des gens étaient maintenant ajoutées au commentaire et pire, elles étaient ajoutées à la section Fichiers… à chaque réponse. Les commentaires ont commencé à arriver.

Le problème

Lorsqu'un e-mail arrive à Teamwork, nous obtenons une liste de fichiers joints. Certains sont de véritables pièces jointes, certains sont des images de signature. Nous n'avons absolument aucun moyen de savoir quelles sont les pièces jointes légitimes et lesquelles font partie d'une signature. Nous avons analysé des centaines d'e-mails et n'avons pas trouvé de moyen standard de distinguer les pièces jointes. Certains noms de fichiers semblaient standard (comme image001.png) que nous pensions pouvoir ignorer, mais nous avons ensuite découvert que les images collées en ligne sur un e-mail pouvaient également être nommées image001.png. Nous ne pouvions pas les ignorer car ils pourraient être une capture d'écran importante!

La solution

Au départ, nous pensions que nous ne pouvions rien y faire. Nous avons estimé que les gens recevaient tous les jours des e-mails avec les mêmes images de signature dans Gmail, Thunderbird, Outlook, etc., afin qu'ils comprennent quand les images de signature sont également reçues plusieurs fois dans Teamwork. Mais Teamwork est différent. L'onglet Fichiers était encombré de ces images de signature et l'espace fichier était utilisé par ces images. Le feedback est venu épais et lourd. Il fallait faire quelque chose. J'étais fatigué de répondre encore et encore aux mêmes commentaires… Et puis j'ai eu une révélation. Et si nous pouvions obtenir une «empreinte digitale» de chaque fichier image afin que quel que soit le nom du fichier, nous saurions qu'il s'agissait de la même image. Je pourrais utiliser une fonction Hash pour obtenir l'empreinte digitale! Une fonction de hachage est un algorithme qui prend un bloc arbitraire de données et renvoie une chaîne de bits de taille fixe. Par exemple, si vous hachez un ebook en transmettant le contenu à la fonction, vous récupérerez une chaîne de 32 caractères. Si vous hachez le même ebook 10 fois, vous obtiendrez toujours la même chaîne de 32 caractères. Si vous avez changé ne serait-ce qu’une seule lettre dans le livre électronique et renvoyé le contenu à travers la fonction, vous obtiendrez une chaîne de 32 caractères complètement différente. Alors j'ai fait un peu de test…. J'ai créé un test unitaire pour une nouvelle fonction que j'ai écrite qui lit le contenu du fichier binaire, le convertit en une chaîne, puis hache le contenu à l'aide d'un hachage MD5. J'ai pris 3 copies de la même image, les ai renommées en file1.jpg, file2.jpg et file3.jpg et ai exécuté chacune à travers ma fonction et la même chaîne «d'empreintes digitales» a été renvoyée. J'ai ensuite étendu mon test unitaire pour qu'il se connecte à une boîte aux lettres POP, traite les pièces jointes et génère «l'empreinte digitale» de chaque pièce jointe. J'ai envoyé 3 e-mails à cette boîte POP chacun avec la même image en pièce jointe et cela a fonctionné! Les 3 empreintes digitales des pièces jointes correspondent. J'ai passé quelques heures à affiner ma fonction, à étendre la base de code Teamwork et à implémenter le hachage des pièces jointes. Comme les images de signature étaient le problème, je n'avais qu'à travailler l'empreinte digitale pour les pièces jointes qui étaient en fait des fichiers image (png, gif, bmp, jpeg, jpg, tiff, etc.) Les images de signature sont également principalement des fichiers de petite taille, donc je n'ai vraiment besoin que de traiter l'image fichiers de moins de 100 Ko. Lorsque nous traitons un e-mail et obtenons la liste des pièces jointes, nous transmettons les pièces jointes d'image via ma nouvelle fonction qui renvoie la chaîne «empreinte digitale». Nous traitons toutes les pièces jointes comme d'habitude et nous stockons «l'empreinte digitale» dans la base de données avec la référence du fichier. La prochaine fois qu’un e-mail est traité, nous faisons la même chose pour chaque pièce jointe d’image, mais nous recherchons la base de données pour voir si nous avons déjà une image avec la même «empreinte digitale». Si nous obtenons une correspondance, nous enregistrons la correspondance pour analyse plus tard, sautons la pièce jointe et passons à la suivante, et ainsi de suite. Nous avons ajouté un index sur la table Files dans la base de données pour «l'empreinte digitale», ce qui signifie que même s'il y a des millions d'enregistrements dans la table, nous obtiendrons notre correspondance instantanément. Depuis que nous l'avons implémenté hier, nos fichiers journaux ont montré une augmentation massive du nombre d'images de signature détectées et supprimées de la fonctionnalité de réponse par e-mail. La toute première fois qu'une réponse par e-mail est traitée pour un utilisateur, ses images de signature seront ajoutées comme d'habitude, mais à partir de là, elles seront ignorées. Si vous supprimez les fichiers de votre projet Teamwork, nous continuerons à faire correspondre les «empreintes digitales» de l'image lors du traitement ultérieur. J'espère que je ne répondrai plus jamais aux commentaires relatifs aux images de signature! Et.