Routage des emails entrants en PHP
L’envoi d’emails est certainement la fonctionnalité la plus connue des utilisateurs de Mailgun, mais Mailgun peut faire bien plus que d’envoyer des emails et d’assurer le suivi des statistiques. Quand on me demande ce que j’aime le plus chez Mailgun, je réponds presque toujours que son API est très intuitive et bien documentée. Il y a cependant une fonctionnalité en particulier dont j’aime parler, et c’est le système d’analyse et de routage des emails entrants, également connu sous le nom de « Routes » dans le panneau de contrôle.
Le routage des emails entrants signifie que vous pouvez configurer Mailgun pour recevoir des emails en votre nom. Vous pouvez le configurer avec un domaine entier ou un sous-domaine de votre choix. Je pense que l’utilisation d’un sous-domaine est la meilleure solution car vous ne pouvez configurer qu’un seul service pour recevoir vos emails à la fois.
Cela signifie que vous ne pouvez pas utiliser votre client de messagerie et la fonctionnalité d’emails entrants de Mailgun sur le même domaine. Pour cette raison, j’ai une configuration comme celle-ci :
- orlando@domain.com : que j’utilise avec un client de messagerie normal
- robots@inbound.domain.com : qui gère d’autres flux de travail d’emails via l’API de Mailgun pour les emails entrants
Une fois qu’un email est reçu, Mailgun peut en faire plusieurs choses : l’envoyer vers un autre point de terminaison de votre choix, le rediriger vers un autre email, ou le stocker pour que vous puissiez le traiter plus tard.
Génial ! À quoi cela me sert-il ?
Traiter toutes les pièces jointes !
Et si vous pouviez utiliser les emails pour créer une application qui reçoit des pièces jointes et les envoie automatiquement vers votre compte de stockage en ligne (comme Dropbox, Google Drive ou similaire) ?
Et si cet email pouvait comprendre qui vous envoie les pièces jointes, ce qu’elles contiennent et les trier en conséquence ?
Bonne nouvelle, avec le routage d’emails de Mailgun, c’est possible !
Vous pouvez le faire en spécifiant un filtre sur un domaine ou un sous-domaine. Pour commencer, consultez les routes dans le panneau de contrôle et n’oubliez pas que vous devrez modifier les paramètres DNS de votre domaine en conséquence afin que vos enregistrements MX pointent vers Mailgun.
Une route est composée d’un filtre, d’une action, d’une description pour permettre de comprendre facilement ce qu’elle fait, et d’une priorité.
Un filtre est de l’un des types suivants :
match_recipient(pattern): où « pattern » est une expression régulière d’une adresse emailmatch_header(header, pattern): où l’en-tête est un (en-tête MIME) et « pattern » une expression régulièrecatch_all(): généralement la priorité la plus basse car elle transfère n’importe quel email entrant
Vous pouvez spécifier le filtre ci-dessus pour déclencher des actions de manière dynamique. Si le filtre correspond à une adresse spécifiée, l’action associée se produira. Une liste des actions est disponible ci-dessous. Gardez à l’esprit que vous pouvez avoir plusieurs actions à la fois :
Forward(): transfère l’email vers une autre adresse email ou URLStore(): enregistre l’email correspondant sur le serveur de Mailgun pendant une durée maximale de 3 jours pour une utilisation ultérieure ou différée.Stop(): arrête simplement la chaîne d’actions. Cette action est requise pour empêcher que le message ne soit traité par d’autres actions. (Nous y reviendrons plus en détail par la suite.)
Hiérarchisez les routes en leur attribuant la priorité adéquate.
- Chiffre faible = priorité élevée
- Chiffre élevé = priorité faible
Les routes ayant la même priorité sont traitées en fonction de leur date de création.
Après avoir configuré le DNS de votre domaine ou sous-domaine pour transférer les emails vers Mailgun comme expliqué dans la documentation avec les paramètres indiqués sur la page de votre domaine vous pouvez passer aux choses sérieuses !
Création, modification et suppression de routes en PHP
Après avoir installé la bibliothèque PHP, nous pouvons créer un nouveau fichier appelé createRoutes.php
post("routes", array(
'priority' => $CONST_PRIORITY,
'expression' => 'match_recipient("'. $CONST_RECIPIENTEXP.'")',
'action' => array('forward("'.$CONST_FORWARDTO.'")', 'stop()'),
'description' => $CONST_DESCRIPTION
));
?>
Pourquoi ne pas lister toutes les routes pour vérifier celles que vous avez déjà créées de manière programmatique, et éventuellement les modifier ?
get(
"routes", array('skip' => 0, 'limit' => 10)
);
#Let's print some output, ofcourse you can iterate the object $result to find more information regarding the routes!
print "<strong>The whole object:</strong>";
print "<br>";
print_r($result);
print "<br>";
print "<strong>The expression assigned to the first route:</strong>";
print "<br>";
print $result->http_response_body->items[0]->expression;
print "<br>";
?>
À ce stade, nous avons créé une route avec succès.
Chaque fois que Mailgun reçoit un email d’une adresse *@sampleprovider.com, Mailgun prend son message et envoie un webhook avec son contenu à http://samplewebsite.com/webhook.
De mon côté (en supposant que http://samplewebsite.com/webhook est mon serveur), je souhaite capturer le contenu du webhook qui a été envoyé lorsqu’un filtre intercepte un email entrant.
Mailgun envoie toutes sortes d’en-têtes, dont la plupart sont répertoriés ci-dessous :
Content-Type
Date
From
In-Reply-To
Message-Id
Mime-Version
Received
References
Subject
To
X-Envelope-From
X-Mailgun-Incoming
X-Received
body-html
body-plain
domain
from
message-headers
message-url
recipient
sender
signature
stripped-html
stripped-signature
stripped-text
subject
timestamp
token
Supposons que nous voulions écrire dans un fichier le corps du message débarrassé de tout code HTML et des retours à la ligne.
Le code suivant sera exécuté par PHP à la réception du webhook envoyé par Mailgun, et écrira le contenu du corps de la requête (dans ce cas j’ai choisi stripped-text, mais ce pourrait être n’importe lequel des éléments ci-dessus) dans un fichier appelé output.txt.
Comme vous pouvez le constater, les possibilités à partir d’ici sont infinies !
Si vous souhaitez en savoir plus sur les fonctionnalités de routage d’emails entrants, consultez la page de documentation ou n’hésitez pas à poser des questions ou à commenter ici ou sur Twitter.
Bons envois !