DKIM SPF, le WTF sur MX

Si vous avez vous aussi des problèmes pour envoyer des emails à des boites Gmail depuis votre boite pro, et que vous avez un message de retour comme ceci, Mail Delevery System This is the mail system at host mo536.mail-out.ovh.net. I’m sorry to have to inform you that your message could not be delivered to one or more recipients. It’s attached below. For further assistance, please send mail to postmaster. If you do so, please include this problem report. You can delete your own text from the attached returned message. The mail system <ape.crevin@gmail.com>: host gmail-smtp-in.l.google.com[74.125.206.27] said: 550-5.7.26 This mail is unauthenticated, which poses a security risk to the 550-5.7.26 sender and Gmail users, and has been blocked. The sender must 550-5.7.26 authenticate with at least one of SPF or DKIM. For this message, 550-5.7.26 DKIM checks did not pass and SPF check for [outquest.fr] did not 550-5.7.26 pass with ip: [51.210.91.12]. The sender should visit 550-5.7.26 https://support.google.com/mail/answer/81126#authentication for 550 5.7.26 instructions on setting up authentication. v7-20020adfebc7000000b00307774d73a8si474631wrn.1056 – gsmtp (in reply to end of DATA command)   alors vous êtes au bon endroit. Cependant , je vais pas m’étendre sur le sujet car, c’est relou, ya 2 pellos qui viendront lire cet article, et surtout je pense que ca va être automatisé d’ici peut de tps.  Outil de test Voici deux liens qui permettent de comprendre ce qu’il se passe https://www.mail-tester.com/ Cet outil permet d’avoir pas mal d’info sur votre serveur mail, il m’a permit de debuger le SPF  https://toolbox.googleapps.com/apps/checkmx/ Ce dernier permet de voir comment Google voit les choses… mais en fait je pense qu’il aide pas bcp, je mets ça là…  Ma config J’ai un service email chez OVH (Email Pro), mais mon Register DNS est ailleurs (PlanetHoster) et pour le moment je veux pas changer car mon dns outquest.fr est gratuit à vie chez eux.  Faut savoir qu’à mon avis, si on a tout chez OVH, DNS et MX ça doit se faire tout seul… mais en vrai j’en sais rien.    SPF Voici la ligne supplémentaire que j’ai ajouté à mon DNS TXT 14400 outquest.fr.  « v=spf1 include:_spf.google.com include:mx.ovh.com ~all » Honnêtement je pige pas trop ce que ça fait, ni même si la partie google n’est pas de trop (je pense qu’elle est de trop) mais bon, ça à l’air de marcher alors je touche plus à rien.  DKIM DKIM c’est un échange de clé privé/public pour vérifier que vous envoyer bien du serveur officiel (outquest.fr pour moi) et que vous n’êtes pas un usurpateur (spammer) Pour ce faire, chez OVH ya toute une procédure ici  https://help.ovhcloud.com/csm/fr-dns-zone-dkim?id=kb_article_view&sysparm_article=KB0058101#pour-e-mail-pro Lisez bien toutes les petites lignes et faites gaffe la doc est pas toujours à jour et l’API en beta… Donc faut faire qq manipulation directement via l’API d’OVH https://api.ovh.com/console/#/email/pro à l’étape 3, le status va être à « Todo », puis passer à « waitingRecord » au bout de qq minutes.  Faites l’étape 4 en attendant. Celle ci consiste à rajouter une entrée DNS, qui elle même va mettre du temps à se propager (d’où le status « waitingRecord ») à l’étape 5 ou vous dit qu’il faut attendre que ce status passe à « ready ». Donc revenir à l’étape 3 et retenter de tps en tps jusqu’à obtenir un status « ready ».       Etape 1 [« ovhemp1076131-selector1″ »ovhemp1076131-selector2 »] Etape 2 Etape 3 après qq minutes, le status passe de todo à waitingRecord Etape 4 Pour passer à l’étape 5, il faut que l’état status soit « ready ».  J’ai cru à un délais de propagation lent du CNAME, mais deux jours plus tard, c’était autre chose.  Alors le support d’OVH m’a gentillement répondu qu’il me manquait un point dans mon CNAME. Voici la cible à utiliser :ovhemp1076131-selector1._domainkey.2370.ad.dkim.mail.ovh.net Voici la cible que j’ai configuré :ovhemp1076131-selector1._domainkey2370.ad.dkim.mail.ovh.net. Le targetRecord reçu de l’API est donc faux. Par contre la doc est ok. Donc si on a pas l’oeil, c’est tendu…  Après changement j’ai refais l’étape 3 : { customerRecord: « ovhemp1076131-selector1._domainkey.outquest.fr » header: « from;to;subject;date » lastUpdate: « 2023-06-13T16:34:35+00:00 » recordType: « CNAME » selectorName: « ovhemp1076131-selector1 » status: « ready » targetRecord: « ovhemp1076131-selector1._domainkey2370.ad.dkim.mail.ovh.net » taskPendingId: 0 } Etape 5 On y est, ce coup ci l’API nous renvoit qq chose qui ressemble à la doc.  Résultat En refaisant un test email avec https://www.mail-tester.com/ j’obtiens un score de 8.2/10 (7/10 avant). Ma DKIM est bien configurée.

Gestion des emails avec WooCommerce , Licence Manager WC et SendinBlue

Constat : J’ai un site e-commerce basé sur wordpress avec un plugin WooCommerce.  Pour mes besoins j’ai ajouté un autre plugin « Licence Manager for WooCommerce ». Ce dernier me permet de générer une clé de licence lors d’un achat d’un produit numérique. Comme un jeu vidéo.  On peut automatiser l’envoi de cette clé au moment ou la commande passe dans le statut « terminé » (order completed) Ceci est activable avec l’option coché ci dessous (dans WooCommerce – Réglage – Onglet Gestionnaire de licences) Ce qui nous envoi cet email, après avoir commandé un produit (numérique). On reçoit donc bien notre clé de licence (MRY-VVY)    Besoins J’aimerais pouvoir cutomiser cet email. Le rendre plus joli déjà, mais surtout ajouter un lien vers mon application avec la clé en paramètre pour démarrer le jeu directement, sans que l’utilisateur n’ait à écrire lui même cette clé de licence.  J’ai contacté un dev du plugin, il a pas su me répondre et pourrait éventuellement inclure cette fonctionnalité dans une prochaine version (inchallah) Donc on va se débrouiller sans et le faire nous même. Les fichiers emails WooCommerce est un plugin qui embarque des templates d’emails par défault.  Si l’on souhaite les cutomiser, il faut les recopier dans le path de votre theme.  Pourquoi ? Car si vous modifiez directement les fichiers dans le répertoire du plugin, ils seront effacés lors de la prochaine mise à jour et vous allez devoir remodifier ceux la.  En recopiant le template d’email dans le path de votre theme, vous sauvegarder celui ci, même apres une mise à jour du plugin. Cependant, ceci ne garantit pas une compatibilité futur. Gardez à l’esprit qu’un jour, ça peut merder… De même, Licence Manager for WooCommerce est un plugin. Il a aussi ses templates d’emails par défaut.  Le code Le fichier qui m’intéresse est le suivant : lmfwc-email-customer-deliver-license-keys.php Et le bout de code suivant affiche la clé de licence dans l’email.  <td class="td" style="text-align: left; vertical-align: middle; font-family: ‘Helvetica Neue’, Helvetica, Roboto, Arial, sans-serif;" colspan="<?php echo ($license->getExpiresAt()) ? ‘1’ : ‘2’; ?>"> <code><?php echo esc_html($license->getDecryptedLicenseKey()); ?></code> </td> Donc à ce stade, je n’ai plus qu’une ligne à rajouter :   <?php $key = $license->getDecryptedLicenseKey(); echo "<a href=’http://game.outquest.fr/activation/$key’>Avec le téléphone qui va servir à jouer, cliquez sur ce lien</a>"; ?> Sauvegardez vos modifs et placer le fichier  lmfwc-email-customer-deliver-license-keys.php dans le repertoire  /wp-content/themes/{votre-Theme/woocommerce/emails/ Notez que c’est pas : /wp-content/themes/{votre-Theme/license-manager-for-woocommerce/emails/   Voici le résultat par email  SendinBlue SendinBlue est la plateforme par laquelle je passe pour envoyer mes emails. J’ai commencé avec une simple newsletter sur ma landing page.  Ensuite j’ai demandé à SendinBlue de gérer aussi l’envoi des email de confirmation de commande effectué.  Cela permet de déléguer l’envoi à une société spécialisé (moins de risque de spam, quand c’est bien fait) mais aussi d’avoir tout un tas de données marketing (ouverture du mail, clic, call to action etc..) Une fois qu’on a autorisé SendinBlue à envoyer tout nos emails,il va légérement modifier tous les liens pour les tracer.  Par exemple, le lien ci dessus était http://game.outquest.fr/activation/XXX-XXX Et devient :  https://dfjfdhi.r.af.d.sendibt2.com/tr/cl/9TxMauVboi221d-fV6iZOAOP-8Gjao1SU9XET3Lz8pl3S_15GogAHUQ0qMN_vwJXGJKZdFP3dVXOD91R4fgkGwgS-luPEmKwSZjQZd5mIWPpQbjhKvaNxdSfY_uwHjdvsFZdi0Ph5juUWKPmNXRAM8DpsuSUiFj-AiL6tBjes4JoG2Xgih98xhgNLY1Mj-LsrmCC1_48j7MxwfvKjHoNAaZ7lRwfiiySLJxNKoRa6K0crle9dt9nfbSx6MwDnOCWGKU     Gestion des emails par SendinBlue Je vous passe l’installation du plugin SendinBlue sur wordpress. Ya dla doc en ligne. Ouvrir le menu WooCommerce – Sendinblue et cliquer en haut a droite sur réglage. On se retrouve sur le backoffice de SendinBlue. Donc celui gère notre site qq part. Allez dans la section Emails Options : et coché la case : Ensuite, je suis plus sûr de moi. J’ai coché ceci : C’est un peu obscure, mais en cochant la case de « Completed Order » mes emails de résumé de commandes partent.  Sinon je ne les reçois plus. Scénario SendinBlue   Pour les besoins de mon jeu, je voudrais envoyer un email supplémentaire pour informer l’utilisateur du déroulement du jeu. Pour cela SendinBlue propose des « Workflows » automatisé. En voici un concernant la commande terminé : Ici est représenté les séquences du workflow, lorsque qu’un évenement de type « order_completed » est détecté, on attend 1 minute (le minimum, je sais pas pourquoi faut absolument attendre…) et on envoit l’email « Email de début du jeu Quête Salamandre »‘ que j’ai au préalable configuré.  Et voila, une minute plus tard, en plus du précédent email, je reçois celui ci :   Pour aller plus loin Pour moi l’idéal serait que lien d’activation se trouve dans le second email.  Ceci implique d’inclure cette clé de licence dans les paramètres géré par sendinblue, lors de la construction de l’email.  Car lors de la création de l’automatisation d’un workflows sur un évenement commande terminé (ou produit acheté) je me suis vu proposé un template par défaut : qui présente des infos de la commande.  Si j’avais en plus qq chose comme {{params.licenceKey}} je serais en mesure de finir cet email.

Signoz et OpenTelemetry avec une app .net sous linux

Disclamer A l’heure ou j’écris cet article, le code source d’OpenTelemetry et Signoz sont en alpha/beta/pre-release.  Certaine lib sont en release officielle. J’édite au fur et à mesure certaine infos. Le code évolue et cet article aussi.  Il n’est certainement plus « à la page » lorsque vous lirez ces ligne.  Et de même, la doc officielle, celle de Microsoft et les ReadMe des repos ne sont pas tous mis à jours en temps et en heure.  C’est un sujet chaud pattate !!! Besoins Comme d’habitude, j’écris un article avec un vrai besoin et une application dans la vraie vie.  J’ai un serveur en prod et je souhaite le monitorer pour : observer son comportement (nombre de requêtes, % de CPU/RAM/Disk, periode d’activité/repos etc) analyser des problèmes, avoir accès aux logs sans ouvrir un terminal être alerté en cas de problème et pouvoir définir ces alertes avoir une vue d’ensemble avec des KPI de base   Contexte Depuis peu (qq années) on a la possibilité de faire tourner du .net sous linux. Ca change quoi allez vous me dire ?  Personnelement une question de coût. Un VPS (virual private server) sous linux c’est au moins deux fois moins cher que sous Windows (ça dépend avec quel fournisseur et les prix ont aussi évolué dans le temps). Mais aujourd’hui un VPS linux est utlra compétitif. Et j’ai pas de besoin cloud (même si j’y pense). Avec Windows on était habitué à installer des outils graphiques supplémentaires. Et meme de base on avait des outils de monitoring. Sous linux, c’est moins évident car on utilise principalement la ligne de commande. Et personnellement j’y retrouve pas mon compte. Même si on peut aussi mettre une interface graphique, c’est pas le but d’un serveur. Enfin, je voudrais pouvoir consulter ceci sans me loguer en ssh (depuis une interface web) et avoir des alertes email et sms serait top.  Actuellement je développe un nouveau produit (https://outquest.fr). Celui ci comporte un site web (game) et un site backoffice (qg). Le site officiel (outquest.fr) et le shop sont hébergés ailleurs (planethoster). J’ai une prod et un staging. (donc 4 site webs au final). J’ai commencé avec un serveur low cost à 2.99€/mois (Debian, 1 core,  2 Go Ram, 25Go SSD …) chez Ikoula. Franchement à ce prix la, ça marche bien pour faire tourner 4 sites webs.(avec que moi dessus hein !) Ces 4 sites web tournent sous 4 services kernel (autorestart) linux et géré par un serveur web frontal NGinx.  –> pour la config voir cet article J’ai de plus une CI/CD géré par azure devops (voir article Azure Devops) qui me permet via des pipelines de deployer automatiquement mon code sur les serveurs web respectif à chaque push git sur mes branches dev et master.  Ca a dla gueule ! Pour un mec tout seul (pour le moment) je sors la grosse artillerie. J’aurais pu partir direct avec un site web en prod et debuger dessus à l’ancienne. Mais j’aime bien apprendre à faire les choses bien :). Et justement, pour faire bien, la prochaine étape c’est le monitoring des serveurs (ya aussi les backups, je pense que j’en ferai un article à part).  Du coup j’ai voulu tester une solution qui me paraissait pas mal, un APM (Application Performance Management) : CheckMK.  Le souci c’est que j’ai vu trop gros (ce machin permet de gérer tout un parc informatique, plusieurs serveurs, node, kubernetes…) Et en l’installation, le machin à fait fondre mon serveur. Plus moyen d’y accéder pendant un temps et pas moyen de le redémarrer (j’ai contacté le support, ce qui m’a pris plusieurs jours, à ce prix la fallait pas attendre des miracles.) Le bon moment pour passer à un niveau supérieur.  A ce stade j’avais ma prod et mon staging sur la meme petite bécanne. Du coup je me dis qu’il faudra quand meme passer sur qq chose de plus sérieux pour la prod. J’ai donc opté pour un VPS OMGServ avec cette config :  Et une option payante supplémentaire de backup. (snapshots) CheckMK tourne déjà beaucoup mieux, mais comme je le disais c’est pas une solution pour moi. Ca install une bardé de trucs dont Apache2, qui fout la merde avec mon Nginx.  Après qq recherches, je suis tombé sur Signoz et OpenTelemetry. Et c’est ce qu’il me faut !   Signoz   Signoz est une interface web permettant de visualiser un ensemble de données sur votre serveur linux.  C’est une solution Open Source, récente et encore en dev. C’est un concurrent à DataDog (payant).  Elle permet de monitorer des applications et de fournir des éléments pertinents pour les devops.  Cette solution naît d’un constat. Les équipes techniques sont frustrées d’utiliser pleins d’outils différents provenants de sources de données elles aussi différentes pour voir leurs logs/metrics/traces …   De plus les outils existants sont « lourds », taillé pour de la grosse boite (faut bien vendre) avec des standards propriétaires et non générique.  Je n’ai pas de recul suffisant mais mon sentiment c’est que c’est compliqué et qu’un outil simple, uniformisé gratuit et open source manquait à ce niveau pour un niveau « intermediaire » (PME, TPME, indé) Un standard est en train d’émerger concernant toute ces données que l’on appelle OpenTelemetry. OpenTelemetry Encore un nouveau framework ? C’est quoi, une couche de plus ? OpenTelemetry c’est une collection d’outil, d’APIs et de SDKs permettant de mesurer, generer, collecter et exporter des données de télémetrie (metrics, logs et traces) afin de mieux analyser le comportement et les performances de nos applications.  Super mais qui porte le truc ? Est ce que c’est un projet qui va être adopté ? Oui, en tout cas par Microsoft : https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-overview Vu l’investissement de Microsoft pour les projets à succès Open Source, et vu le besoin, je pense qu’OpenTelemetry a de l’avenir.  Installer Signoz Il existe plusieurs façon d’installer Signoz, j’ai choisi pour ma part la version Standalone (https://signoz.io/docs/install/docker/) sur mon VPS linux Debian 11. Vous devrez télécharger le repo git : git clone -b main https://github.com/SigNoz/signoz.git puis vous rendre dans le répertoire suivant :…