Envoi d'e-mails à partir d'applications Python Flask avec Twilio SendGrid

Publié: 2020-06-30

Déterminer s'il faut construire ou acheter votre infrastructure de messagerie n'est pas une mince décision. Disposez-vous de la bande passante nécessaire pour prendre en charge les problèmes de délivrabilité ? Serez-vous capable de suivre votre envoi au fur et à mesure de votre croissance ? Quoi de plus rentable ? Bien qu'il y ait un certain nombre de facteurs à considérer, c'est une conversation pour un autre guide (comme ce guide Build it ou Buy It ).

Au lieu de cela, ce didacticiel vous montrera à quel point il est facile d'envoyer des e-mails via un service de messagerie dédié. Nous verrons comment envoyer des e-mails via Twilio SendGrid à l'aide du framework Flask et de l' extension Flask-Mail .

Outils de didacticiel

Pour suivre ce tutoriel, vous avez besoin des éléments suivants :

  • Python 3.6 ou plus récent. Si votre système d'exploitation ne fournit pas d'interpréteur Python 3.6+, vous pouvez vous rendre sur python.org pour télécharger un programme d'installation.
  • Un compte Twilio SendGrid gratuit. Si vous êtes nouveau sur Twilio SendGrid, inscrivez-vous pour un compte d'essai . Avec un compte d'essai, vous pouvez envoyer 40 000 e-mails pendant 30 jours, puis 100 e-mails par jour pour toujours.

Mise en place avec SendGrid

Avant de pouvoir envoyer des e-mails via SendGrid, vous devez créer une clé API que vous utiliserez pour authentifier l'accès aux services SendGrid. Connectez-vous à votre compte SendGrid, puis cliquez sur la barre latérale gauche, sélectionnez "Paramètres" puis Clés API . Cliquez sur "Créer une clé API".

Donnez à votre clé API un nom convivial (restez simple et direct pour vous rappeler à quoi elle fait référence !). Pour ce tutoriel, nous avons choisi le nom Flask-Mail . Nous avons sélectionné "Accès complet" pour les autorisations, ce qui donne à la clé la possibilité d'effectuer toutes les fonctions d'envoi d'e-mails nécessaires (accès aux terminaux GET, PATCH, PUT, DELETE et POST). Si vous préférez créer une clé dotée d'autorisations très spécifiques, sélectionnez "Accès restreint" et configurez votre accès selon vos besoins.

Lorsque vous cliquez sur le bouton "Créer et afficher", votre clé vous sera présentée. Cette clé ne sera plus jamais affichée, vous devez donc cliquer dessus pour la copier dans le presse-papiers. Collez-le ensuite dans un document sécurisé afin de pouvoir l'utiliser ultérieurement. Si vous perdez votre clé, vous devrez en générer une toute nouvelle. Une fois que vous avez enregistré votre clé, vous pouvez cliquer sur le bouton "Terminé".

Construire un environnement Python

Maintenant que la configuration est terminée, nous pouvons nous pencher sur la façon d'envoyer des e-mails à partir des applications Python Flask. Nous allons commencer par créer un nouveau répertoire sur votre ordinateur appelé *twilio-sendgrid-tests* (ou quelque chose de similaire), puis créer un nouvel environnement virtuel Python à l'intérieur.

Pour les utilisateurs Mac et Unix, les commandes sont :

Pour les utilisateurs de Windows, les commandes sont :

Ensuite, installez Flask, Flask-Mail et python-dotenv dans votre environnement virtuel :

Configurer une application Flask

Construisons une application de démarrage Flask et Flask-Mail dans le fichier app.py :

Ici, vous pouvez voir comment configurer correctement Flask-Mail pour utiliser le service SMTP de SendGrid. Les paramètres importants sont :

  • Le serveur de messagerie doit être `smtp.sendgrid.net`.
  • Le port de messagerie doit être 587. (Savez-vous quels ports utiliser quand ? Consultez cet article de blog. )
  • TLS doit être activé. (Quelle est la différence entre SSL et TLS ?)
  • L'authentification est requise. Pour le nom d'utilisateur, vous devez utiliser `apikey` (c'est le même pour tous les comptes SendGrid). Le mot de passe est la clé API SendGrid que vous avez créée dans la section précédente.

Pour cette application Flask, nous avons ajouté les paramètres ci-dessus dans les clés de configuration appropriées pour l'extension Flask-Mail. Pour des raisons de sécurité, nous avons importé la clé API à partir d'une variable d'environnement nommée `SENDGRID_API_KEY`. Nous définissons également une adresse e-mail d'expéditeur par défaut à partir d'une variable d'environnement. Il s'agit de l'adresse e-mail qui apparaîtra dans le champ "De" de tous les e-mails par défaut.

Créez un fichier .env avec les deux variables requises :

Flask importera automatiquement les variables définies dans le fichier .env (tant que le package python-dotenv est installé), cela suffit donc pour obtenir ces deux variables dans la configuration de l'application Flask.

Envoi d'un e-mail de test

Voyons comment vous pouvez vous envoyer un e-mail de test depuis le shell Python :

Notez que nous avons démarré le shell Python avec la commande `flask shell`. Cela garantira que l'application Flask que nous avons construite dans app.py est importée.

Une fois dans le shell, importez l'instance "mail" que nous avons créée dans app.py et la classe "Message" de Flask-Mail :

Créez ensuite une instance `Message` :

La dernière étape consiste à envoyer cet e-mail :

Et c'est tout! Si tout se passe comme prévu, l'e-mail devrait arriver dans votre boîte de réception en quelques secondes seulement.

Si vous souhaitez voir un exemple de route Flask qui intègre cette fonctionnalité, en voici une simple que vous pouvez ajouter en bas de app.py :

Pour compléter l'exemple d'application, vous devez ajouter le fichier de modèle index.html . Créez d'abord un répertoire pour vos modèles :

Et puis écrivez le contenu suivant dans le fichier templates/index.html :

Exécutez l'application de test avec :

Accédez ensuite à http://localhost:5000 dans votre navigateur Web pour accéder à l'application.

Vous pouvez maintenant entrer une adresse e-mail de destinataire et lorsque vous cliquez sur le bouton, un e-mail de test sera envoyé à cette adresse.

Résolution des problèmes de livraison

En utilisant l'application Flask ci-dessus, vous devriez réussir à envoyer des e-mails. Il est cependant possible que vos e-mails ne soient pas livrés. Étant donné que SendGrid envoie des e-mails de manière asynchrone, la plupart des erreurs de livraison se produisent après que l'expéditeur a terminé sa partie de la transaction, de sorte que votre application n'aura aucune indication qu'il y a eu une erreur. Si cela se produit, il est probable que l'e-mail ait été rejeté par le serveur de messagerie du destinataire.

Heureusement, si vous rencontrez ce problème en envoyant un e-mail comme nous l'avons décrit, vous pouvez utiliser le tableau de bord Twilio SendGrid pour vous aider à déboguer ce qui s'est passé. Depuis le tableau de bord SendGrid , cliquez sur Activity , puis sur le bouton « Show All Activity » au milieu de la page. Cela vous montrera une liste de tous les e-mails que vous avez tenté d'envoyer, indiquant s'ils ont été livrés avec succès ou non.

Vous pouvez voir dans l'image ci-dessus qu'un e-mail envoyé à une adresse example.com n'a pas été livré. Pour tous les e-mails qui n'ont pas été livrés, vous pouvez cliquer sur l'e-mail pour afficher des informations détaillées, y compris les réponses d'erreur envoyées par le serveur de messagerie du destinataire.

Une fois que vous avez déterminé pourquoi vos e-mails ne sont pas envoyés, il existe plusieurs façons de résoudre ces problèmes de livraison. Si vous voyez un certain nombre de fautes d'orthographe dans les e-mails (par exemple @yaho.com ou @gmal.com), il peut être utile d'explorer un outil de validation des e-mails pour détecter les fautes d'orthographe courantes dans votre liste de contacts par e-mail.

De nombreux autres problèmes peuvent entraîner un échec de la livraison, notamment une mauvaise réputation d'envoi ou une adresse IP bloquée. Apprenez tout sur la délivrabilité des e-mails dans notre Guide de délivrabilité des e-mails 2020 .

Conclusion

Comme vous pouvez le voir dans le didacticiel, Twilio SendGrid s'intègre facilement au flux de travail d'envoi d'e-mails de Start Flask, ce qui simplifie l'envoi d'e-mails.

Si vous vous demandez maintenant comment vous recevez les e-mails du Flask Framework en Python, ne vous inquiétez pas, nous avons ce qu'il vous faut ! Consultez cet article : Comment recevoir des e-mails avec le framework Flask pour Python .

Et, pour plus de ressources sur la façon d'intégrer Twilio SendGrid ou d'envoyer via nos API, consultez notre Centre de connaissances .