Envoyer des e-mails avec Mailjet


Mailjet est un service de messagerie tiers à l'échelle mondiale dont la version gratuite permet aux utilisateurs de Compute Engine d'envoyer 6 000 e-mails par mois. Mailjet propose également :

  • une API, une interface utilisateur et un relais SMTP permettant d'envoyer des e-mails transactionnels et marketing ;
  • la conformité aux règles européennes en matière de confidentialité des données ;
  • des fonctionnalités de messagerie et de délivrabilité, telles que les paramètres de priorité personnalisables et la gestion automatisée de la fréquence d'envoi ;
  • une bibliothèque de ressources d'API dans les langages Go, PHP, Node.js, Java, Python et Ruby, afin de gérer les sous-comptes, l'authentification, les contacts, les campagnes, les charges utiles personnalisées, les statistiques, les événements en temps réel et les analyses via l'API Event ;
  • un framework MJML intégré permettant de créer des modèles d'e-mail HTML réactifs ;
  • une assistance qui suit les fuseaux horaires (24h/24 et 7j/7), disponible dans plus de quatre langues ;
  • la possibilité d'envoyer des e-mails à partir d'autres domaines que gmail.com.

Ce document explique comment configurer votre instance de VM pour l'envoi d'e-mails via Mailjet à l'aide des méthodes suivantes :

  • Via un relais SMTP avec :
  • Directement via l'API Mailjet si vous utilisez Java

Pour obtenir une documentation complète sur d'autres solutions de messagerie, comme des exemples d'intégration aux bibliothèques, frameworks et serveurs SMTP les plus courants, consultez la documentation de Mailjet.

Avant de commencer

  1. Créez un compte Mailjet sur la page des partenaires Google de Mailjet*. Lors de l'inscription, indiquez le domaine et l'adresse e-mail à partir desquels vous souhaitez envoyer des e-mails.

  2. Obtenez vos identifiants de compte SMTP Mailjet.

  3. Assurez-vous que l'adresse e-mail à partir de laquelle vous souhaitez envoyer des e-mails a été validée.

  4. Configurez une règle de pare-feu pour autoriser le trafic TCP sur le port 2525.

* Google est rémunéré pour les clients créant un compte payant.

Configurer Mailjet en tant que relais SMTP

En configurant Mailjet comme un relais de messagerie, vous pouvez transférer vers Mailjet des e-mails destinés à être distribués à distance.

Avec Postfix

  1. Connectez-vous à votre VM à l'aide de SSH, en remplaçant instance-name par le nom de l'instance à partir de laquelle vous souhaitez envoyer des e-mails :

    gcloud compute ssh instance-name
  2. Sur l'instance de VM, installez l'agent de transport de messages Postfix. Lorsque vous y êtes invité, acceptez les choix par défaut pour les noms de domaine, mais sélectionnez la configuration Local Only.

    Debian

    sudo apt update && sudo apt -y install postfix libsasl2-modules
    

    CentOS

    sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
    

  3. Modifiez les options de configuration de Postfix. Elles sont définies dans le fichier main.cf. Ouvrez-le avec l'éditeur de texte de votre choix.

    sudo vi /etc/postfix/main.cf
    
  4. Mettez à jour le fichier :

    1. Passez les lignes suivantes en commentaire :

      # default_transport = error
      # relay_transport = error
      
    2. Ajoutez les lignes suivantes à la fin du fichier :

      relayhost = in-v3.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

      Ces lignes appliquent la compatibilité des protocoles SSL/TLS et configurent l'authentification SMTP pour ces requêtes. Un module de couche de sécurité et d'authentification simple (SASL, Simple Authentication and Security Layer) gère l'authentification dans la configuration de Postfix.

    3. Enregistrez les modifications et fermez le fichier.

  5. Créez la carte de mot de passe SASL avec l'éditeur de texte de votre choix :

    sudo vi /etc/postfix/sasl_passwd
    
  6. Dans le fichier sasl_passwd, ajoutez les lignes suivantes afin de fournir les identifiants pour Mailjet :

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. Avec l'utilitaire postmap, générez un fichier .db :

    sudo postmap /etc/postfix/sasl_passwd
    sudo ls -l /etc/postfix/sasl_passwd*
    

    Vous devez obtenir la réponse suivante :

    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  8. Ensuite, supprimez le fichier contenant vos identifiants, car il n'est plus nécessaire :

    sudo rm /etc/postfix/sasl_passwd
    
  9. Définissez les autorisations sur le fichier .db :

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. Enfin, rechargez votre configuration pour charger les paramètres modifiés :

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. Testez la configuration. Installez le package mailx ou mailutils, puis testez votre configuration.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    Envoyez un message de test :

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

    Remplacez l'élément suivant :

    • from-email : adresse e-mail validée
    • destination-email : adresse à laquelle envoyer l'e-mail

    Dans vos journaux système, recherchez une ligne d'état contenant status et le code de réponse du serveur indiquant le succès de l'opération ((250)) :

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

Si vous rencontrez des problèmes lors de la configuration de Postfix avec Mailjet, consultez les instructions de Mailjet pour la configuration de Postfix.

Avec Nodemailer

Les instructions suivantes décrivent comment utiliser Mailjet avec Node.js sur Debian Wheezy.

Debian
  1. Connectez-vous à votre instance via SSH :
    gcloud compute ssh instance-name
  2. Mettez à jour vos dépôts de packages :
    user@test-wheezy:~# sudo apt update
  3. Installez les dépendances Node.js :
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. Clonez le dépôt Node.js de GitHub :
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Remplacez le répertoire par l'arborescence source de Node.js :
    user@test-wheezy:~# cd node
  6. Configurez le logiciel de nœud pour ce système d'exploitation et cette machine virtuelle :
    user@test-wheezy:~# ./configure
  7. Compilez Node.js, npm et les objets associés :
    user@test-wheezy:~# sudo make

    Cette opération peut prendre quelques minutes.

  8. Installez Node.js, npm et les autres logiciels à l'emplacement par défaut :
    user@test-wheezy:~# sudo make install
  9. Installez le package mailer :
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. Dans le répertoire node, créez un fichier nommé sendmail.js contenant le code JavaScript suivant :
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Exécutez le programme pour envoyer un e-mail via Mailjet :
    user@test-wheezy:~# node sendmail.js
CentOS
  1. Connectez-vous à votre instance via SSH :
    gcloud compute ssh instance-name
  2. Mettez à jour les dépôts de packages :
    user@test-centos:~# sudo yum update -y
  3. Installez les dépendances Node.js :
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. Clonez le dépôt Node.js de GitHub :
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. Remplacez le répertoire par l'arborescence source de Node.js :
    user@test-centos:~# cd node
  6. Configurez le logiciel de nœud pour ce système d'exploitation et cette machine virtuelle :
    user@test-centos:~# ./configure
  7. Compilez Node.js, npm et les objets associés :
    user@test-centos:~# sudo make

    Cette opération peut prendre quelques minutes.

  8. Installez Node.js, npm et les autres logiciels à l'emplacement par défaut :
    user@test-centos:~# sudo make install
  9. Installez le package mailer :
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. Dans le répertoire node, créez un fichier nommé sendmail.js contenant le code JavaScript suivant :
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Exécutez le programme pour envoyer un e-mail via Mailjet :
    user@test-centos:~# node sendmail.js

Envoyer des e-mails via l'API Mailjet avec Java

Pour consulter plus d'exemples d'utilisation de l'API Mailjet, consultez la documentation officielle de Mailjet.

Debian
  1. Connectez-vous à votre instance via SSH :
    gcloud compute ssh instance-name
  2. Mettez à jour vos dépôts de packages et installez les packages requis :
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. Clonez le dépôt Java de GitHub :
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Accédez au code source principal de l'exemple, situé dans :
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configurez vos paramètres Mailjet. Consultez la documentation Mailjet concernant l'authentification pour savoir comment remplacer les variables suivantes :

    • your-mailjet-api-key : clé API pour votre compte Mailjet ;
    • your-mailjet-secret-key : clé secrète correspondante pour votre compte Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. Dans le répertoire mailjet, utilisez Maven pour empaqueter la classe en tant que fichier JAR :
    user@test-instance:~# mvn clean package
  7. Assurez-vous que vous utilisez OpenJDK 8 :
    user@test-instance:~# sudo update-alternatives --config java
  8. Pour envoyer un e-mail à partir du répertoire cible, exécutez le fichier JAR avec vos adresses e-mail d'expéditeur et de destinataire comme arguments :
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. Connectez-vous à votre instance via SSH :
    gcloud compute ssh instance-name
  2. Mettez à jour vos dépôts de packages et installez les packages requis :
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. Clonez le dépôt Java de GitHub :
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Accédez au code source principal de l'exemple, situé dans :
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configurez vos paramètres Mailjet. Pour savoir comment remplacer les variables suivantes, consultez la documentation Mailjet concernant l'authentification :

    • your-mailjet-api-key : clé API pour votre compte Mailjet ;
    • your-mailjet-secret-key : clé secrète correspondante pour votre compte Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. Dans le répertoire mailjet, utilisez Maven pour empaqueter la classe en tant que fichier JAR :
    user@test-centos:~# mvn clean package
  7. Assurez-vous que vous utilisez OpenJDK 8 :
    user@test-centos:~# sudo alternatives --config java
  8. Pour envoyer un e-mail à partir du répertoire cible, exécutez le fichier JAR avec vos adresses e-mail d'expéditeur et de destinataire comme arguments :
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

Paramètres SMTP de Mailjet

Voici un récapitulatif des paramètres SMTP spécifiques de Mailjet utilisés pour configurer les clients :

  • Hôte : in-v3.mailjet.com
  • Port : 2525

Étapes suivantes

Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.