
Dans cette partie, nous allons examiner comment l'outil peut être adapté pour injecter des flux de courrier dans des plateformes sur site telles que PowerMTA et Momentum.
Business in a box.
Découvrez nos solutions.
Parlez à notre équipe de vente
Dans la partie 1, nous avons fait un bref tour de S/MIME, en examinant la signature et le chiffrement de nos flux de messages sur une gamme de clients de messagerie. La partie 2 nous a guidés à travers un simple outil en ligne de commande pour signer et chiffrer des e-mails, puis les envoyer via SparkPost.
Dans cette partie, nous verrons comment l'outil peut être adapté pour injecter des flux de messagerie dans des plateformes locales telles que Port25 PowerMTA et Momentum.
D'accord – commençons !
1. Mise en route
L'installation de l'outil, l'obtention de vos clés, etc. est exactement la même qu'auparavant. Lorsque vous utilisez un système de messagerie sur site tel que PowerMTA ou Momentum, vous êtes déjà responsable de la configuration des domaines d'envoi, des clés DKIM, etc. Ce que nous devons faire maintenant, c'est fournir un moyen d'injecter les messages S/MIME entièrement formés dans vos serveurs.
2. Injection SMTP vers Port25 PowerMTA
3. Injection SMTP vers Momentum
Momentum prend en charge différents moyens d'injection de messages, y compris API et SMTP. SMTP est la méthode utilisée ici, vers un hôte exécutant déjà Momentum. Nous laisserons sa configuration inchangée, car elle a déjà la capacité d'accepter des injections entrantes d'autres hôtes approuvés.
C'est une version plus petite d'une configuration de production, où les nœuds de « génération » et les nœuds MTA sont séparés, mais étroitement couplés via un VLAN privé et des équilibrages de charge, transportant le trafic d'injection SMTP interne.

Les outils S/MIME sont installés comme auparavant, et nous injecterons des messages à l'adresse de l'hôte SMTP (MTA) :
export SMTP_HOST=xx.xx.xx.xx # définissez ici votre propre adresse MTA / VIP
Comme précédemment, nous avons la clé privée de l'expéditeur (steve@thetucks.com.pem) et la clé publique du destinataire (steve.tuck@sparkpost.com.crt) déjà présentes sur le nœud de « génération ». Les premières lignes du fichier message correspondent à ces adresses.
Nous envoyons le message depuis le nœud de « génération » avec exactement la même commande qu'avant, et le message apparaît dans l'Inbox.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Comme vous vous en doutez, S/MIME coexiste également joyeusement avec DKIM signing de Momentum.
4. Injection SMTP vers SparkPost
Dans la partie 2, nous avons utilisé l'API REST des transmissions de SparkPost pour injecter des messages. Bien sûr, il est également possible d'injecter des messages dans SparkPost en utilisant SMTP. Nous définissons les variables d'environnement ainsi :
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
Si vous utilisez le service hébergé par l'UE de SparkPost, alors définissez SMTP_HOST comme smtp.eu.sparkpostmail.com.
(Voir ici pour plus d'options – par exemple, vous pouvez injecter sur le port 2525 plutôt que 587.)
La sortie ci-dessous montre que STARTTLS est utilisé, avec le nom d'utilisateur et le mot de passe.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
Vous verrez :
Connexion SMTP ouverte (STARTTLS) à smtp.sparkpostmail.com, port 587, user="SMTP_Injection", password="****************************************" Envoi de tests/fancy-HTML-to-smt.eml De : Steve <steve@thetucks.com> À : SteveT <steve.tuck@sparkpost.com> OK - en 0.057 secondes
Le mot de passe est imprimé avec des caractères de substitution ***, donc vous ne compromettrez pas la confidentialité de votre clé si quelqu'un regarde par-dessus votre épaule.
Sécurisation de vos identifiants
Notez que les variables d'environnement pourraient être configurées dans un fichier script shell ou similaire, pour éviter de les retaper. Si vous le faites, prenez soin de vos mots de passe/clés API en limitant l'accès à ce fichier uniquement à vous-même. Par exemple, si votre fichier de configuration des identifiants est nommé my_envs.sh, alors exécutez :
chmod 0700 my_envs.sh
Avertissements liés à SMTP que vous pourriez voir
L'injection SMTP de SparkPost est assez stricte, comme vous vous y attendez pour un service public. Si vous n'avez pas défini le numéro de port SMTP, vous verrez un avertissement :
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
Si vous n'avez pas défini le nom d'utilisateur SMTP ou n'avez pas défini le mot de passe, vous verrez :
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
Ces messages d'erreur sont simplement rapportés tel quel par la bibliothèque SMTP de Python, d'où le formatage.
Lequel est plus rapide – SMTP ou API ?
Franchement, S/MIME n'est probablement pas un cas d'utilisation à fort volume, mais avoir le même outil avec deux options de sortie, c'était nous donner envie de courir une course !
Le fichier de test de courrier électronique "Avocado" utilisé ici pèse environ 19KB. Répéter les tests 10 fois via une boucle bash a montré que les temps moyens étaient similaires pour SMTP et API, environ 60 millisecondes par message, ce qui est assez rapide. Dans ce cas, nous avons injecté depuis une instance EC2 moyenne dans la même région d'hébergement que SparkPost.com, ce qui est un bon moyen de maintenir bas les temps de latence réseau.
En répétant cela avec un fichier de test plus grand (577KB), l'API a pris environ 200 millisecondes, tandis que SMTP a pris 280 millisecondes par message – toujours impressionnant pour une taille de fichier 30x plus grande. Bien sûr, vos résultats peuvent varier en fonction de l'emplacement, de la congestion internet, etc., mais les performances ne devraient pas poser problème.
Si vous avez vraiment besoin de performances maximales, un bon point de départ serait de lancer un nombre défini de processus/sessions d'injection concurrents selon nos recommandations de meilleures pratiques de transmission – par exemple, depuis une tâche de superviseur.
En résumé…
Nous avons vu comment l'outil basé sur l'API SparkPost utilisé dans Partie 2 est mis à jour pour prendre en charge l'injection SMTP afin de prendre en charge les MTA sur site tels que Port25 PowerMTA et Momentum dans une variété de configurations, ainsi qu'avec SparkPost.
C'est tout pour le moment ! Bon envoi.