{"id":22935,"date":"2026-09-15T23:52:49","date_gmt":"2026-09-15T23:52:49","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/guide-pratique-utilisation-webhooks-mailgun\/"},"modified":"2026-09-15T23:52:49","modified_gmt":"2026-09-15T23:52:49","slug":"guide-pratique-utilisation-webhooks-mailgun","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/","title":{"rendered":"Guide pratique d&rsquo;utilisation des webhooks de Mailgun"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><i>Cet article invit\u00e9 a \u00e9t\u00e9 r\u00e9dig\u00e9 par\u00a0<\/i><i><b>Opeyemi Obembe<\/b><\/i><i>, un client de Mailgun bas\u00e9 au Nigeria. Quand nous avons d\u00e9couvert\u00a0le tutoriel d&rsquo;Opeyemi sur la configuration des webhooks, nous avons su qu&rsquo;il fallait le partager avec vous. Non seulement la m\u00e9thodologie d&rsquo;Opeyemi est infaillible, mais il est exactement le type de d\u00e9veloppeur que nous aimons soutenir.<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Opeyemi s&rsquo;est inscrit \u00e0 Mailgun pour la premi\u00e8re fois il y a quatre ans, et a depuis cr\u00e9\u00e9 des projets vraiment int\u00e9ressants. Plus r\u00e9cemment, il a d\u00e9velopp\u00e9\u00a0Suet, un projet open source qui fournit des statistiques et des rapports d\u00e9taill\u00e9s pour les emails transactionnels envoy\u00e9s via Mailgun. Vous pouvez l&rsquo;utiliser en tandem avec nos nouvelles fonctionnalit\u00e9s de statistiques pour obtenir plus d&rsquo;informations sur l&rsquo;engagement de vos emails.<\/i><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les emails transactionnels sont essentiels pour la plupart des applications. Nous envoyons des emails de bienvenue, des emails de r\u00e9cup\u00e9ration de mot de passe, des notifications, et bien plus encore. Et dans ce cas, nous faisons appel \u00e0 des fournisseurs comme Mailgun. Envoyer des emails, c&rsquo;est super, mais qu&rsquo;en est-il de la livraison et des performances\u00a0? Cet utilisateur a-t-il bien re\u00e7u cet email de r\u00e9initialisation de mot de passe\u00a0? Cet email de notification d&rsquo;expiration de carte de cr\u00e9dit a-t-il \u00e9t\u00e9 ouvert\u00a0?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien que ces donn\u00e9es soient disponibles dans\u00a0<a href=\"https:\/\/app.mailgun.com\/sessions\/new\" target=\"_tabs\" rel=\"noopener noreferrer\">le tableau de bord de votre compte Mailgun<\/a>, une autre fa\u00e7on d&rsquo;obtenir des mises \u00e0 jour sur ce qui arrive \u00e0 vos messages transactionnels dans Mailgun est d&rsquo;utiliser <a href=\"https:\/\/www.mailgun.com\/resources\/learn\/glossary\/webhook\/\" target=\"_tabs\" rel=\"noopener noreferrer\">webhooks<\/a>.\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/intro\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Il existe \u00e9galement l&rsquo;API<\/a>, mais contrairement \u00e0 l&rsquo;API o\u00f9 vous \u00ab\u00a0demandez\u00a0\u00bb ces mises \u00e0 jour (Poll), avec les webhooks, les mises \u00e0 jour vous sont envoy\u00e9es (Push). Il vous suffit de fournir l&rsquo;URL d&rsquo;un script capable de traiter les donn\u00e9es d&rsquo;\u00e9v\u00e9nement via\u00a0<code>POST<\/code>.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-2487\"><p class=\"h5 m-0\" id=\"toc-title-2487\">Table des mati\u00e8res<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#mise-en-place-de-webhooks\">Mise en place de webhooks<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#traitement-des-donnees\">Traitement des donn\u00e9es<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#securisation\">S\u00e9curisation<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#mise-a-lechelle\">Mise \u00e0 l&rsquo;\u00e9chelle<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#conclusion\">Conclusion<\/a><\/div><\/div><\/nav>\n\n\n<p class=\"wp-block-paragraph\"><b>Inutile de pr\u00e9ciser que le push pr\u00e9sente certains avantages par rapport au poll.<\/b><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vous n&rsquo;avez pas besoin d&rsquo;effectuer des requ\u00eates API r\u00e9p\u00e9t\u00e9es. Cela signifie que vous consommez moins de ressources serveur.<\/li>\n\n\n\n<li>Les mises \u00e0 jour se font davantage en temps r\u00e9el, car elles sont pouss\u00e9es d\u00e8s qu&rsquo;elles sont disponibles sur le serveur.<\/li>\n<\/ul>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_24c26f23f257e7df80337860f7c41ad1\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                S&rsquo;inscrire            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_24c26f23f257e7df80337860f7c41ad1\">\r\n                Lancez-vous, c&rsquo;est facile ! Et c&rsquo;est gratuit.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">D\u00e9couvrez ce que vous pouvez accomplir avec la meilleure plateforme de livraison d\u2019emails au monde.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n\n\n\n<h2 class=\"wp-block-heading\">Mise en place de webhooks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe deux fa\u00e7ons de configurer des webhooks dans Mailgun. Vous pouvez le faire via le tableau de bord Mailgun ou\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/api-reference\/openapi-final\/tag\/Webhooks\/\" target=\"_tabs\" rel=\"noopener noreferrer\">API<\/a>. La m\u00e9thode la plus simple consiste \u00e0 utiliser le tableau de bord. Une fois sur votre tableau de bord,\u00a0<a href=\"https:\/\/app.mailgun.com\/app\/webhooks\" target=\"_tabs\" rel=\"noopener noreferrer\">un lien Webhooks<\/a>\u00a0est disponible dans la barre de navigation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4570\" width=\"1024\" height=\"783\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1.jpeg\" alt=\"webhooks1\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1.jpeg 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1-300x229.jpeg 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/webhooks1-768x587.jpeg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La page des webhooks r\u00e9pertorie les diff\u00e9rents types d&rsquo;\u00e9v\u00e9nements pour lesquels vous pouvez recevoir des donn\u00e9es. En cliquant sur l&rsquo;ic\u00f4ne \u00ab\u00a0+\u00a0\u00bb en face de chaque \u00e9v\u00e9nement, <b>vous pouvez d\u00e9finir l&rsquo;URL \u00e0 laquelle les donn\u00e9es d&rsquo;\u00e9v\u00e9nement seront envoy\u00e9es.<\/b><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Traitement des donn\u00e9es<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour traiter les donn\u00e9es d&rsquo;\u00e9v\u00e9nement envoy\u00e9es \u00e0 l&rsquo;URL de notre webhook, nous devons d&rsquo;abord savoir \u00e0 quoi ces donn\u00e9es ressembleront. Les param\u00e8tres envoy\u00e9s via POST sont disponibles\u00a0<a href=\"https:\/\/documentation.mailgun.com\/docs\/mailgun\/user-manual\/tracking-messages\/#tracking-open-messages\" target=\"_tabs\" rel=\"noopener noreferrer\">dans la documentation API<\/a>. Nous pouvons aller plus loin et le confirmer en utilisant une URL de webhook de test qui enregistrera les donn\u00e9es provenant de Mailgun. Nous pouvons utiliser\u00a0<a href=\"http:\/\/bin.mailgun.net\/?utm_source=mailgun&amp;utm_medium=blog&amp;utm_campaign=webhooks-1710\" target=\"_tabs\" rel=\"noopener noreferrer\">le Postbin de Mailgun<\/a>\u00a0ou\u00a0<a href=\"https:\/\/requestbin.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">requestb.in<\/a>. <b>Ces services g\u00e9n\u00e9reront un point de terminaison unique que nous pourrons utiliser dans le tableau de bord Mailgun pour obtenir des exemples de donn\u00e9es d&rsquo;\u00e9v\u00e9nement<\/b>. Je recommande requestbin car il fournit plus de d\u00e9tails, comme les en-t\u00eates de requ\u00eate. Ces en-t\u00eates sont importants car vous pourriez facilement ne pas remarquer que Mailgun envoie certaines donn\u00e9es avec le content-type\u00a0[<code>application\/x-www-form-urlencoded]<\/code>\u00a0et d&rsquo;autres au format\u00a0[<code>multipart\/form-data]<\/code>. Passer \u00e0 c\u00f4t\u00e9 de ces petits d\u00e9tails change du tout au tout la fa\u00e7on dont vous obtenez les donn\u00e9es d&rsquo;\u00e9v\u00e9nement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cr\u00e9ons un point de terminaison de test pour voir \u00e0 quoi ressemblent les donn\u00e9es d&rsquo;\u00e9v\u00e9nement par rapport \u00e0 ce qui se trouve dans la documentation.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consultez <a href=\"https:\/\/requestbin.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">requestb.in<\/a> et cr\u00e9ez un bin.<\/li>\n\n\n\n<li>Copiez l&rsquo;URL et acc\u00e9dez <a href=\"https:\/\/app.mailgun.com\/app\/webhooks\" target=\"_tabs\" rel=\"noopener noreferrer\">\u00e0 la section Webhooks de votre tableau de bord Mailgun<\/a>.<\/li>\n\n\n\n<li>Collez l&rsquo;URL dans le champ de saisie et cliquez sur le lien \u00ab\u00a0Test Webhook\u00a0\u00bb. Cela enverra des exemples de donn\u00e9es d&rsquo;\u00e9v\u00e9nement \u00e0 l&rsquo;URL.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4571\" width=\"1024\" height=\"547\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM.png\" alt=\"Screen-Shot-2019-04-12-at-3\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM.png 1024w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM-300x160.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/Screen-Shot-2019-04-12-at-3.18.54-PM-768x410.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>R\u00e9p\u00e9tez cette op\u00e9ration pour tous les \u00e9v\u00e9nements qui vous int\u00e9ressent.<\/li>\n\n\n\n<li>Actualisez la page de requestbin pour voir les donn\u00e9es d&rsquo;\u00e9v\u00e9nement envoy\u00e9es.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4572\" width=\"956\" height=\"343\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data.png\" alt=\"requestbin-webhooks-data\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data.png 956w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data-300x108.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/requestbin-webhooks-data-768x276.png 768w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous examinez attentivement les donn\u00e9es sur requestbin, vous remarquerez ce que j&rsquo;ai dit concernant certaines donn\u00e9es envoy\u00e9es au format multipart\/form-data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que nous connaissons les param\u00e8tres pour chaque type d&rsquo;\u00e9v\u00e9nement et le type de contenu sous lequel ils peuvent se pr\u00e9senter, il est facile d&rsquo;\u00e9crire le code pour traiter les donn\u00e9es envoy\u00e9es. Voici un code simple qui affichera les d\u00e9tails des plaintes et des emails rejet\u00e9s. (J&rsquo;utilise\u00a0<a href=\"https:\/\/github.com\/expressjs\/multer\" target=\"_tabs\" rel=\"noopener noreferrer\">multer<\/a>\u00a0pour g\u00e9rer le multipart\/form-data.)<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const express = require(&#039;express&#039;)  rn    , bodyParser = require(&#039;body-parser&#039;)rn    , multer = require(&#039;multer&#039;)rn    ;rnrnconst app = express();  rnapp.use(bodyParser.urlencoded({extended: false}));  rnapp.listen(process.env.PORT || 3000);rnrnapp.post(&#039;\/webhook&#039;, multer().none(), function(req, res) {  rn  const email = req.body.recipient;rn  const event = req.body.event;rnrn  if (event == &#039;complained&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;${email} complained about your mail&lt;\/code&gt;);rn  }rn  else if (event == &#039;dropped&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Mail to ${email} dropped. ${event.description}&lt;\/code&gt;);rn  }rn  else if (event == &#039;bounced&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Error ${event.code}: Mail to ${email} bounced. ${event.error}&lt;\/code&gt;);rn  }rnrn  res.end();rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e9curisation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rien n&#8217;emp\u00eache une personne qui conna\u00eet l&rsquo;URL de notre webhook de cr\u00e9er de fausses donn\u00e9es d&rsquo;\u00e9v\u00e9nement et de les envoyer \u00e0 cette URL. Heureusement, Mailgun signe chaque requ\u00eate envoy\u00e9e et publie \u00e9galement les param\u00e8tres suivants\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>timestamp (nombre de secondes \u00e9coul\u00e9es depuis le 1er janvier 1970)<\/li>\n\n\n\n<li>jeton (cha\u00eene de 50 caract\u00e8res g\u00e9n\u00e9r\u00e9e al\u00e9atoirement)<\/li>\n\n\n\n<li>signature (cha\u00eene hexad\u00e9cimale g\u00e9n\u00e9r\u00e9e par l&rsquo;algorithme HMAC)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier le jeton, vous devez\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Concat\u00e9ner les valeurs du timestamp et du jeton.<\/li>\n\n\n\n<li>Encoder la cha\u00eene r\u00e9sultante avec HMAC, en utilisant votre cl\u00e9 de signature de webhook HTTP comme cl\u00e9 et Sha256 comme algorithme.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Le r\u00e9sultat doit \u00eatre identique \u00e0 la signature.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici ce que cela donne dans Node.js\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const value = event_data_timestamp+event_data_token;  rnconst hash = crypto.createHmac(&#039;sha256&#039;, apikey)  rn                   .update(value)rn                   .digest(&#039;hex&#039;);rnif (hash !== event_data_signature) {  rn  console.log(&#039;Invalid signature&#039;);rn  return;rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Si nous ajoutons cela \u00e0 notre exemple de code initial, nous obtiendrons quelque chose comme ceci\u00a0:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const express = require(&#039;express&#039;)  rn    , crypto = require(&#039;crypto&#039;)rn    , multer = require(&#039;multer&#039;)rn    , bodyParser = require(&#039;body-parser&#039;)rn    ;rnrnconst app = express();  rnapp.use(bodyParser.urlencoded({extended: false}));  rnapp.listen(process.env.PORT || 3000);rnrnapp.get(&#039;\/webhook&#039;, multer().none(), function(req, res) {  rn  \/\/ Validate signaturern  const value = req.body.timestamp+req.body.token;rn  const hash = crypto.createHmac(&#039;sha256&#039;,rn              process.env.API_KEY)rn                   .update(value)rn                   .digest(&#039;hex&#039;);rn  if (hash !== req.body.signature) {rn    console.log(&#039;Invalid signature&#039;);rn    return res.end();rn  }rnrn  \/\/ Log status of eventrn  const email = req.body.recipient;rn  const event = req.body.event;rnrn  if (event == &#039;complained&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;${email} complained about your mail&lt;\/code&gt;);rn  }rn  else if (event == &#039;dropped&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Mail to ${email} dropped. ${event.description}&lt;\/code&gt;);rn  }rn  else if (event == &#039;bounced&#039;) {rn    console.log(&lt;code data-enlighter-language=&quot;generic&quot; class=&quot;EnlighterJSRAW&quot;&gt;Error ${event.code}: Mail to ${email} bounced. ${event.error}&lt;\/code&gt;);rn  }rnrn  res.end();rn});\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Nous pouvons m\u00eame aller plus loin, et\u00a0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pour chaque requ\u00eate, v\u00e9rifier dans un cache de jetons afin d&rsquo;\u00e9viter l&rsquo;utilisation du m\u00eame jeton. Chaque jeton y sera stock\u00e9. Cela permettra d&rsquo;\u00e9viter les attaques par rejeu.<\/li>\n\n\n\n<li>V\u00e9rifier que le timestamp n&rsquo;est pas trop \u00e9loign\u00e9 de l&rsquo;heure actuelle.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mise \u00e0 l&rsquo;\u00e9chelle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous envoyez beaucoup d&#8217;emails et que vous attendez un grand nombre d&rsquo;\u00e9v\u00e9nements, placer votre script de webhook sur un serveur qui ne peut pas \u00e9voluer automatiquement est une mauvaise id\u00e9e. M\u00eame si vous ne vous attendez pas \u00e0 beaucoup d&rsquo;\u00e9v\u00e9nements, des impr\u00e9vus peuvent entra\u00eener une forte augmentation des \u00e9v\u00e9nements. Avoir un serveur capable d&rsquo;\u00e9voluer automatiquement est tr\u00e8s utile dans ce genre de situation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9couvrez le\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Serverless_computing\" target=\"_tabs\" rel=\"noopener noreferrer\">serverless computing<\/a>. En clair, l&rsquo;id\u00e9e est que vous pouvez d\u00e9l\u00e9guer l&rsquo;ex\u00e9cution de votre code et tout ce qui s&rsquo;y rapporte \u00e0 un fournisseur. Plusieurs instances de votre code peuvent \u00eatre ex\u00e9cut\u00e9es en parall\u00e8le, et vous pouvez ajuster les ressources informatiques, comme la RAM et le temps d&rsquo;ex\u00e9cution, \u00e0 la vol\u00e9e. Cela le rend hautement \u00e9volutif. <b>Vous \u00eates \u00e9galement factur\u00e9 en fonction des ressources consomm\u00e9es et du temps d&rsquo;ex\u00e9cution. Cela peut donc s&rsquo;av\u00e9rer tr\u00e8s \u00e9conomique si vous n&rsquo;envoyez pas souvent de gros volumes d&#8217;emails.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe plusieurs fournisseurs de serverless computing. L&rsquo;un de ceux que j&rsquo;utilise et recommande est\u00a0<a href=\"https:\/\/cloud.google.com\/functions\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Google Cloud Functions<\/a>\u00a0en raison de la facilit\u00e9 de configuration des fonctions HTTP. Une fonction HTTP est un bloc de code encapsul\u00e9 sous forme de fonction qui peut \u00eatre d\u00e9clench\u00e9 en visitant une URL. C&rsquo;est exactement ce dont nous avons besoin pour notre webhook.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cr\u00e9er cette fonction, nous devons \u00e9crire une fonction JavaScript qui sera export\u00e9e en tant que module Node.js. La fonction prend des arguments sp\u00e9cifiques au protocole HTTP\u00a0:\u00a0<code>request<\/code>\u00a0et\u00a0<code>response<\/code>.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    exports.webhook = function(request, response) {  rn  \/\/ Handle event data herern  response.send({status:&quot;ok&quot;});rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">En fonction du content-type de la requ\u00eate, le corps de la requ\u00eate est automatiquement transmis et disponible dans le param\u00e8tre\u00a0<code>body<\/code>\u00a0de l&rsquo;objet de requ\u00eate.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    exports.webhook = function(request, response) {  rn  let event = request.body.event; \/\/ deliveredrn  \/\/ Handle event data herern  \/\/ ...rn  response.send({status:&quot;ok&quot;});rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><b>Cependant, cela ne fonctionne pas pour le type de contenu multipart\/form-data<\/b>. Et comme nous le savons d\u00e9j\u00e0, Mailgun envoie certaines donn\u00e9es au format multipart\/form-data. Nous pouvons int\u00e9grer une biblioth\u00e8que comme\u00a0<a href=\"https:\/\/github.com\/expressjs\/multer\" target=\"_tabs\" rel=\"noopener noreferrer\">Multer<\/a>\u00a0en utilisant\u00a0<code>require()<\/code>. Cependant, nous devons nous assurer que la d\u00e9pendance est r\u00e9pertori\u00e9e dans le fichier\u00a0<b>package.json<\/b>.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    const multer = require(&#039;multer&#039;);rnrnexports.webhook = function(request, response) {  rn  parser(request, response, function(){rn    console.log(request.body); \/\/ Our event datarn    \/\/ Handle event data herern    \/\/ ...rn    response.send({status:&quot;ok&quot;});rn  });rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Java                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Java\">\r\n                                <code id=\"code_0_content\" class=\"language-Java\">\r\n\r\n                                    {rn  &quot;dependencies&quot;: {rn    &quot;multer&quot;: &quot;^1.3.0&quot;rn  }rn}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, nous pouvons publier la fonction sur\u00a0<a href=\"https:\/\/cloud.google.com\/functions\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Cloud Functions<\/a>. Un moyen simple de le faire est de passer par le tableau de bord de Cloud Functions.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Acc\u00e9dez \u00e0 votre <a href=\"https:\/\/console.cloud.google.com\/start\" target=\"_tabs\" rel=\"noopener noreferrer\">console Google Cloud<\/a> (si vous n&rsquo;avez pas encore de compte, cr\u00e9ez-en un).<\/li>\n\n\n\n<li>Activez Cloud Functions dans le tableau de bord.<\/li>\n\n\n\n<li>Cliquez sur \u00ab\u00a0Cr\u00e9er une fonction\u00a0\u00bb.<\/li>\n\n\n\n<li>Entrez un nom pour votre fonction (par exemple, \u00ab\u00a0mailgun-webhook\u00a0\u00bb).<\/li>\n\n\n\n<li>Dans la section de d\u00e9clenchement, s\u00e9lectionnez \u00ab\u00a0D\u00e9clencheur HTTP\u00a0\u00bb. Notez l&rsquo;URL, il s&rsquo;agira de l&rsquo;URL de votre webhook.<\/li>\n\n\n\n<li>Copiez le code de traitement des donn\u00e9es d&rsquo;\u00e9v\u00e9nement dans la section i<i>ndex.js <\/i>de la fonction Cloud.<\/li>\n\n\n\n<li>Copiez le contenu de votre <b>package.json <\/b>et collez-le dans la section <i>package.json <\/i>.<\/li>\n\n\n\n<li>S\u00e9lectionnez ou cr\u00e9ez un <i>Stage bucket<\/i>. Le stage bucket est simplement l&rsquo;endroit o\u00f9 le code est pr\u00e9par\u00e9. Vous pouvez utiliser ce que vous voulez ici.<\/li>\n\n\n\n<li>Dans <i>Fonction \u00e0 ex\u00e9cuter<\/i>, saisissez le nom de votre fonction (par exemple, \u00ab\u00a0webhook\u00a0\u00bb).<\/li>\n\n\n\n<li>Enregistrer.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez d\u00e9sormais utiliser l&rsquo;URL de la fonction dans Mailgun comme URL de webhook.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Travailler avec les webhooks de Mailgun est facile. Il existe de nombreuses fa\u00e7ons d&rsquo;utiliser les donn\u00e9es d&rsquo;\u00e9v\u00e9nement pour enrichir vos applications en dehors de Mailgun. Si, par exemple, vous permettez \u00e0 vos utilisateurs d&rsquo;envoyer des emails depuis votre site Web pour quelque raison que ce soit et que vous utilisez Mailgun, vous pouvez utiliser les webhooks pour leur fournir des statistiques. Vous souhaitez peut-\u00eatre envoyer vos statistiques d&#8217;emails vers une autre plateforme. Vous souhaitez peut-\u00eatre \u00eatre notifi\u00e9 en cas d&rsquo;\u00e9chec dans votre\u00a0<a href=\"https:\/\/slack.com\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Slack<\/a>\u00a0compte. Ou peut-\u00eatre pas du tout, peut-\u00eatre souhaitez-vous simplement des statistiques plus d\u00e9taill\u00e9es. Quel que soit le cas d&rsquo;utilisation, <b>les donn\u00e9es d&rsquo;\u00e9v\u00e9nement sont \u00e0 votre disposition.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un exemple concret, consultez la source du\u00a0<a href=\"https:\/\/github.com\/kehers\/suet\/blob\/master\/workers\/hooks\/index.js\" target=\"_tabs\" rel=\"noopener noreferrer\">fichier webhook de Suet<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><i>Vous souhaitez essayer les webhooks de Mailgun\u00a0? Inscrivez-vous\u00a0!<\/i><\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_24c26f23f257e7df80337860f7c41ad1\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                S&rsquo;inscrire            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_24c26f23f257e7df80337860f7c41ad1\">\r\n                Lancez-vous, c&rsquo;est facile ! Et c&rsquo;est gratuit.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">D\u00e9couvrez ce que vous pouvez accomplir avec la meilleure plateforme de livraison d\u2019emails au monde.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n\n\n\n<p class=\"wp-block-paragraph\"><i>Et si vous avez besoin d&rsquo;aide pour faire vos premiers pas avec Mailgun,\u00a0<\/i><a href=\"https:\/\/www.crowdcast.io\/e\/getting-started-with-mailgun?utm_source=mailgun&amp;utm_medium=blog&amp;utm_campaign=webhooks-1710\" target=\"_tabs\" rel=\"noopener noreferrer\"><i>d\u00e9couvrez cette formation Mailgun gratuite<\/i><\/a><i>! Notre responsable du support client, Chris Hammer, vous guide tout au long du processus de configuration et vous aide \u00e0 d\u00e9marrer l&rsquo;envoi, la r\u00e9ception et le suivi de vos emails avec Mailgun.<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.<\/p>\n","protected":false},"author":13,"featured_media":4555,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[22],"class_list":["post-22935","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-product"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Guide pratique d&#039;utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guide pratique d&#039;utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/\",\"name\":\"Guide pratique d'utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"datePublished\":\"2026-09-15T23:52:49+00:00\",\"description\":\"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Product.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/product\\\/guide-pratique-utilisation-webhooks-mailgun\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Guide pratique d\u2019utilisation des webhooks de Mailgun\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Guide pratique d'utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun","description":"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/","og_locale":"fr_FR","og_type":"article","og_title":"Guide pratique d'utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun","og_description":"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.","og_url":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/","url":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/","name":"Guide pratique d'utilisation des webhooks de Mailgun - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","datePublished":"2026-09-15T23:52:49+00:00","description":"D\u00e9couvrez comment configurer des webhooks, traiter les donn\u00e9es de vos emails transactionnels et s\u00e9curiser les donn\u00e9es des webhooks dans cet article invit\u00e9 r\u00e9dig\u00e9 par un client de Mailgun.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Product.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/fr\/blog\/product\/guide-pratique-utilisation-webhooks-mailgun\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Guide pratique d\u2019utilisation des webhooks de Mailgun"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/fr\/#website","url":"https:\/\/www.mailgun.com\/fr\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !","publisher":{"@id":"https:\/\/www.mailgun.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/fr\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":1,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22935\/revisions"}],"predecessor-version":[{"id":22936,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/22935\/revisions\/22936"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media\/4555"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media?parent=22935"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog_category?post=22935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}