Envoyer des e-mails avec SendGrid


Ce tutoriel explique comment utiliser SendGrid pour envoyer des e-mails depuis une application s'exécutant sur une instance de machine virtuelle (VM) Compute Engine.

Objectifs

  • Utiliser SendGrid avec Postfix sur une instance Compute Engine.
  • Utiliser SendGrid en code Java exécuté sur une instance Compute Engine.
  • Utiliser SendGrid en code Node.js exécuté sur une instance Compute Engine.
  • Utiliser SendGrid avec un serveur de transport Microsoft Exchange Edge sur une instance Compute Engine.

Pour en savoir plus sur la configuration de SendGrid, consultez la documentation SendGrid destinée aux développeurs.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • Compute Engine

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Accédez à la page Créer une instance dans la console Google Cloud.

    Accéder à la page Créer une instance

  7. Définissez Nom sur sendgrid-tutorial.
  8. Dans la section Disque de démarrage, cliquez sur Modifier pour commencer à configurer le disque de démarrage.
  9. Dans l'onglet Public images, sélectionnez a Debian or CentOS image version.
  10. Cliquez sur Sélectionner.
  11. Pour créer la VM, cliquez sur Créer.
  12. Inscrivez-vous au service de messagerie électronique SendGrid via Google Cloud Marketplace. Notez vos informations d'identification de compte SMTP SendGrid, y compris le nom d'utilisateur, le mot de passe et le nom d'hôte. Votre nom d'utilisateur et votre mot de passe SMTP sont les mêmes que ceux utilisés pour vous inscrire au service. Le nom d'hôte SendGrid est smtp.sendgrid.net.
  13. Créez une clé API :
    1. Connectez-vous à Sendgrid et accédez à Paramètres > Clés API.
    2. Créez une clé API.
    3. Sélectionnez les autorisations pour la clé. La clé a besoin au minimum de l'autorisation d'envoi d'e-mails pour envoyer des e-mails.
    4. Cliquez sur Enregistrer pour créer la clé.
    5. SendGrid génère une nouvelle clé. Il s'agit de la seule copie de la clé. Assurez-vous de la copier et de l'enregistrer pour plus tard.

Envoyer des messages depuis votre instance avec Postfix

Pour vous connecter à votre instance sendgrid-tutorial et exécuter SendGrid avec Postfix, procédez comme suit.

Se connecter à une instance sendgrid-tutorial à l'aide de SSH

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

Configurer SendGrid en tant que relais SMTP avec Postfix

Pour utiliser SendGrid en tant que relais SMTP avec Postfix, exécutez les commandes suivantes dans votre terminal SSH.

  1. Devenez un superutilisateur :

    sudo su -
    
  2. Définissez un "umask" sécurisé :

    umask 077
    
  3. Installez l'agent de transfert de messages Postfix :

    Debian

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

    CentOS

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

    À l'invite, sélectionnez la configuration Uniquement en local et acceptez le nom de domaine par défaut.

  4. Modifiez les options de configuration de Postfix. Ouvrez /etc/postfix/main.cf pour y apporter des modifications. Par exemple, pour utiliser l'éditeur de texte nano, saisissez la commande suivante :

    nano /etc/postfix/main.cf
    
  5. 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 = [smtp.sendgrid.net]:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      header_size_limit = 4096000
      smtp_sasl_security_options = noanonymous
      

      Les lignes ci-dessus 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.

  6. Enregistrez et fermez le fichier.

  7. Générez la carte de mot de passe SASL à l'aide de la clé API créée dans la section Avant de commencer. Remplacez your-api-key par la clé API que vous avez générée.

    echo [smtp.sendgrid.net]:2525 apikey:your-api-key >> /etc/postfix/sasl_passwd
  8. Avec l'utilitaire postmap, générez un fichier .db :

    postmap /etc/postfix/sasl_passwd
    
  9. Vérifiez que vous disposez d'un fichier .db :

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. Supprimez le fichier contenant vos informations d'identification, car il n'est plus nécessaire :

    rm /etc/postfix/sasl_passwd
    
  11. Définissez les autorisations sur votre fichier .db et vérifiez que l'autre fichier a été supprimé :

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. Rechargez votre configuration pour charger les paramètres modifiés :

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Installez le package mailutils ou mailx :

    Debian

    apt -y install mailutils

    CentOS

    yum install mailx -y
    

  14. Envoyez un e-mail test :

    echo 'message' | mail -s subject email@example.com

    Remplacez l'élément suivant :

    • message : corps de l'e-mail.
    • subject : objet de l'e-mail.
    • email@example.com : adresse e-mail à laquelle vous souhaitez envoyer un message.

    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

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

Envoyer des e-mails avec Java sur votre instance

Se connecter à une instance sendgrid-tutorial à l'aide de SSH

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

Créer et envoyer un message électronique

Les instructions suivantes utilisent la bibliothèque cliente Java SendGrid pour créer et envoyer un message électronique via SendGrid. L'exemple complet est disponible sur GitHub.

Dans votre terminal SSH :

  1. Devenez un superutilisateur et définissez un "umask" sécurisé :

    sudo su -
    umask 077
    
  2. Installez Java et Maven :

    apt -y update && apt -y install git-core openjdk-11-jdk maven
    
  3. Clonez le dépôt GitHub :

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. Accédez au code source principal de l'exemple :

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. Ouvrez SendEmailServelet.java pour y apporter des modifications.

    • Remplacez your-sendgrid-api-key par la clé API de votre compte SendGrid.

    • Remplacez your-sendgrid-from-email par l'adresse e-mail à partir de laquelle vous souhaitez envoyer des e-mails.

    • Remplacez destination-email par l'adresse e-mail à laquelle vous souhaitez envoyer des e-mails.

  6. Accédez au répertoire racine de l'exemple de code :

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Réalisez le package de la classe Java :

    mvn clean package
    
  8. Accédez au nouveau répertoire target :

    cd target
    
  9. Définissez les autorisations pour exécuter le fichier jar :

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. Exécutez le sélecteur de version Java alternatif :

    update-alternatives --config java
    

    Cochez l'option java-11-openjdk-amd64.

  11. Exécutez le fichier Java :

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

Envoyer un e-mail avec Node.js sur votre instance

Pour exécuter cet exemple, Node.js doit être installé sur votre instance de VM dans sa version 7.6 ou une version ultérieure.

Se connecter à une instance sendgrid-tutorial à l'aide de SSH

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

Créer et envoyer un message électronique

Dans votre terminal SSH :

  1. Devenez un superutilisateur et définissez un "umask" sécurisé :

    sudo su -
    umask 077
    
  2. Mettez à jour vos dépôts de packages :

    Debian

    apt update
    

    CentOS

    yum update -y
    

  3. Installez les dépendances Node.js :

    Debian

    apt -y install git-core curl build-essential openssl libssl-dev
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. Installez Node.js. Par défaut, npm est également installé :

    Debian

    curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
    sudo apt -y install nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_14.x | bash -
    

    Ensuite, installez Node.js :

    yum -y install nodejs
    

  5. Installez le client SendGrid Node.js :

    npm install sendgrid
    
  6. Clonez l'exemple de dépôt :

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  7. Accédez au répertoire contenant l'exemple SendGrid :

    cd nodejs-docs-samples/compute
    
  8. Copiez le fichier sendgrid.js :

    cp sendgrid.js sendmail.js
    
  9. Ouvrez sendmail.js pour y apporter des modifications.

    • Remplacez your-sendgrid-api-key par la clé API de votre compte SendGrid.

    • Remplacez from-email@example.com par l'adresse e-mail à partir de laquelle vous souhaitez envoyer des e-mails.

    • Remplacez to-email@example.com par l'adresse e-mail à laquelle vous souhaitez envoyer des e-mails.

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text: 'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. Exécutez le programme pour envoyer un message électronique via SendGrid :

    node sendmail.js
    

Envoyer des e-mails depuis un serveur de transport Edge Exchange

Vous pouvez configurer Microsoft Exchange pour envoyer des e-mails sortants avec SendGrid en configurant un connecteur d'envoi sortant. Pour plus d'informations, consultez la section Déployer Microsoft Exchange Server 2016 sur Compute Engine.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer votre instance Compute Engine

Pour supprimer une instance Compute Engine, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cochez la case correspondant à votre instance sendgrid-tutorial.
  3. Pour supprimer l'instance, cliquez sur Autres actions , cliquez sur Supprimer, puis suivez les instructions.

Étapes suivantes

Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.