Mettre en place un serveur SMTP avec AWS SES

Dans le monde de l'informatique le serveur mail fait partie d'un des casse-têtes d’anthologie. Vous n'avez plus envie de vous prendre la tête le weekend? Passez à AWS!
En effet, amazon fournit une panoplie d'outils permettant de répondre aux rêves de tout adminsys ou devops.Ici nous nous intéresserons plus particulièrement au service SES (Simple Email Service). Tout est dans le nom, ce service vous permet d'herberger en quelque clique votre propre serveur stmp vous offrant ainsi la possibilité d'envoyer des milliers d'emails par jour. Et tout cela à moindre coût! 

Coût
0 USD pour les 62 000 premiers e-mails envoyés chaque mois, et 0,10 USD par tranche de 1 000 e-mails envoyés par la suite.
0,12 USD par Go de pièces jointes envoyées plus les frais supplémentaires applicables pour l'utilisation d'EC2.

 

De base ce service est en mode sandbox, c'est à dire que son utilisation du service est limitéé. Ceci est dû au fait qu' Amazon veuille se protéger contre les spammeurs et personnes malintentionnés. Il ne sera donc possible dans ce mode d'envoyer des mails qu'à une whitelist (liste de mails validés) tout en observant une limite dans le quota d'utilisation de 200 emails par jour. 
C'est pas très drôle tout ca ^^.  Dans ce tuto seront abordés les mécanismes à mettre en place  afin de remédier à ces limitations.



Étapes pour passer en mode production

Pour passer en mode production vous devez soumettre une requête au support aws. Nous allons illustrer étape par étape les démarches à effectuer afin d'utiliser votre serveur SMTP pour envoyer des mails à n'importe avec la signature de votre domaine ou de votre mail personnel.

1- Avoir un compte AWS
2- Se rendre sur le service SES et valider le domaine ou l’adresse email qui sera utilisée en signature de vos mails.

On entend par valider le fait de prouver que vous êtes bien le propriétaire du domaine ou de l'adresse email en question. Car une fois la propriété prouvée AWS se fera passer pour vous.

Si vous optez pour une vérification domaine vous pourrez envoyer des mails avec n'importe quel nom.
Par exemple après la validation de test.fr, vous pourrez envoyer des mails en tant que toto@test.fr, titi@test.fr etc...
Si par contre en optant pour la validation email vous ne pourrez utiliser que l comme signature.


Demande de validation E-mail

Une fois la demande lancée un email sera envoyé à l'adresse à valider. Il vous suffira de suivre le lien pour finaliser la validation de l'adresse.

  

 Validation du domain

Quant à la validation du domaine, l'ajout du TXT fourni par AWS dans votre gestionnaire d'enregistrement DNS suffira pour confirmer la propriété.



3- Configuration du serveur SMTP

Maintenant que les emails et/ou domaines sont validés, il ne reste plus qu'à configurer les identifiants permettant de se connecter au serveur SMTP.
Pour cela, se rendre dans la section SMTP settings et cliquer sur le bouton create My SMTP credentials.

 Génération des identifiants SMTP

Suivre les instructions à la fin,  les identifiants  générés seront accessibles en téléchargement et en  copier-coller.

Les identifiants

Et voila! Le serveur SMTP est prêt à être utilisé.

Si vous êtes sous linux vous pourrez le tester grâce au programme swaks comme suite: 
echo "contenu" | swaks --to receveur@test.fr --from "test@test.fr" --server email-smtp.eu-west-1.amazonaws.com --auth LOGIN --auth-user "Valeur SMTP Username" --auth-password "Valeur SMTP Password" --tls


Par contre, on est toujours en mode sandbox. Afin de quitter ce mode, il va falloir envoyer un message au support d'AWS expliquant comment vous souhaitez utiliser leur service.

En gros, ils veulent connaître l'origine des adresses mails vers lesquelles vous souhaitez effectuer des envois. Mais surtout comment vous gérez les cas d'erreurs.
En effet, dans le monde du mailing, il y a deux cas d'erreurs majeures les bounces et les complaints.
Les bounces, représentent les cas ou l'email n'a pu être délivré car le destinataire n'existe pas, ou n'existe plus.
Les complaints, représentent les cas ou le destinataire à bien reçu votre mail mais ne souhaite plus le recevoir :). Du coup, si vous n'êtes pas un spammeur, vous devrez enlever le destinataire de votre mailing list.


Les types d'érreurs



Il ya différentes manières de gérer les cas d'erreurs, vous pourrez utiliser le sdk fourni par amazon pour gérer ces cas directement dans votre application (java, node ect...).
Autrement, pour les personnes  n'utilisant pas d'applications ou n'ayant pas les ressources pour implementer le sdk, il ya une solution alternative.

A savoir, créer des topics AWS ou encore SNS (Simple Notification Service). Comme son nom l'indique c'est un simple service de notification dont par lequel nous allons transiter afin de recevoir des notifications mails en cas d'erreurs lors des envois. Et en conséquence, s'engager à modifier notre mailing en fonction.


4- Configuration des topics


Se rendre dans le service SNS et lancer la création d'un topic pour les notifications bounces.


Creation du topic bounce

Une fois le topic crée, mettre en place une liaison avec l'email de réception des notifications des erreurs.

Creation d'une subscription

Répéter le processus, pour le topic qui sera utilisé pour les complaints.

5- Liaison finale entre SES et SNS

Pour finir, il ne reste plus qu'à faire la liaison entre nos domaines ou emails validés et les topics.
Pour cela, il faut retourner dans SES sélectionner  le domaine ou l'email à configurer, puis cliquez sur view details. 
Ainsi vous aurez accès à la configuration du système de notification dans la section notifications.


Configuration des notifications

Cf image ci-dessus vous n'avez plus qu'à sélectionner vos topics qui devraient automatiquement apparaître dans la liste de section (attention à la region aws de création).

Sauvegarder et voila! Il ne vous reste plus qu'à ouvrir une  SES Sending Limits Increase case dans le Centre de support. Suivre les instructions et vous serez notifié par AWS du passage en production (augmentation du quota et la possibilité d'envoyer des emails partout dans le monde).