De quoi avez-vous besoin pour envoyer un e-mail avec Python? Quelques connaissances de base en programmation et en web ainsi que les compétences élémentaires en Python. Nous supposons que vous avez déjà créé une application Web avec cette langue et que vous devez maintenant étendre ses fonctionnalités avec des notifications ou d’autres envois d’e-mails. Ce tutoriel vous guidera à travers les étapes les plus essentielles de l’envoi d’e-mails via un serveur SMTP:

  1. Configuration d’un serveur pour les tests (savez-vous pourquoi c’est important?,)
    • Serveur SMTP local
    • Mailtrap faux serveur SMTP
  2. Différents types d’e-mails: HTML, avec des images et des pièces jointes
  3. Envoi de plusieurs e-mails personnalisés (Python est tout simplement inestimable pour l’automatisation de la messagerie)
  4. Certaines options d’envoi d’e-mails populaires comme Gmail et les services!

    Remarque: écrit et testé sur Python 3.7.2.

    Envoi d’e-mails via SMTP

    La première bonne nouvelle à propos de Python est qu’il dispose d’un module intégré pour envoyer des e-mails via SMTP dans sa bibliothèque standard., Aucune installation ou astuce supplémentaire n’est requise. Vous pouvez importer le module en utilisant l’instruction suivante:

    import smtplib

    Pour vous assurer que le module a été importé correctement et obtenir la description complète de ses classes et arguments, tapez une session Python interactive:

    help(smtplib)

    Lors de notre prochaine étape, nous parlerons un peu des serveurs: choisir la bonne option et la configurer.,

    Serveur SMTP pour tester les e-mails en Python

    Lors de la création d’une nouvelle application ou de l’ajout de fonctionnalités, en particulier lors de la première fois, il est essentiel d’expérimenter sur un serveur de test. Voici une brève liste des raisons:

    1. Vous ne toucherez pas les boîtes de réception de vos amis et de vos clients. Ceci est essentiel lorsque vous testez l’envoi d’e-mails en masse ou travaillez avec une base de données d’e-mails.
    2. Vous n’inonderez pas votre propre boîte de réception d’e-mails de test.
    3. Votre domaine ne sera pas mis sur liste noire pour le spam.,

    Serveur SMTP local

    Si vous préférez travailler dans l’environnement local, le serveur de débogage SMTP local peut être une option. A cet effet, Python propose un module smtpd. Il dispose d’une fonctionnalité DebuggingServer, qui supprimera les messages que vous envoyez et les imprimera sur stdout. Il est compatible avec tous les systèmes d’exploitation.,

    Définissez votre serveur SMTP sur localhost:1025

    python -m smtpd -n -c DebuggingServer localhost:1025

    Pour exécuter le serveur SMTP sur le port 25, vous aurez besoin des autorisations root:

    sudo python -m smtpd -n -c DebuggingServer localhost:25

    Cela vous aidera à vérifier si votre code fonctionne et à signaler les problèmes possibles s’il y en a. Cependant, cela ne vous donnera pas la possibilité de vérifier le rendu de votre modèle d’e-mail HTML.,

    Faux serveur SMTP

    Faux serveur SMTP imite le travail d’un véritable 3ème partie serveur web. Dans d’autres exemples dans cet article, nous utiliserons Mailtrap. Au-delà de tester l’envoi d’e-mails, il nous permettra de vérifier comment l’e-mail sera rendu et affiché, d’examiner les données brutes du message et de nous fournir un rapport de spam., Mailtrap est très facile à configurer: il vous suffit de copier les informations d’identification générées par l’application et de les coller dans votre code.

    Voici à quoi il ressemble dans la pratique:

    Mailtrap rend les choses encore plus facile. Accédez à la section Intégrations dans l’onglet Paramètres SMTP et obtenez le modèle prêt à l’emploi du message simple, avec vos informations d’identification Mailtrap., Il est le plus basique option d’instruire votre script Python qui envoie ce qui est le sendmail() méthode d’instance:

    Essayez Mailtrap Gratuitement

    Le code est assez simple, non? Examinons-le de plus près et ajoutons une gestion des erreurs (voir les #explications entre les deux). Pour détecter les erreurs, nous utilisons les « essayer” et « sauf” blocs. Reportez-vous à la documentation pour la liste des exceptions ici.,

    Une fois que vous obtenez le résultat envoyé dans le Shell, vous devriez voir votre message dans votre boîte de réception Mailtrap:

    Envoi d’un e-mail HTML

    dans la plupart des cas, vous devez ajouter une mise en forme, des liens ou des images à vos notifications par e-mail. Nous pouvons simplement mettre tout cela avec le contenu HTML. À cet effet, Python dispose d’un package de messagerie.

    Nous allons traiter le type de message MIME, qui est capable de combiner HTML et texte brut. En Python, il est géré par l’électronique.module mime.,

    Il est préférable d’écrire une version texte et une version HTML séparément, puis de les fusionner avec l’instance MIMEMultipart(« alternative”). Cela signifie qu’un tel message a deux options de rendu en conséquence. Dans le cas où un HTML n’est pas rendu avec succès pour une raison quelconque, une version texte sera toujours disponible.

    Entrée:

    Résultat:

    l’Envoi d’e-mails avec des pièces jointes en Python

    La prochaine étape dans la maîtrise de l’envoi des emails avec Python est de joindre des fichiers., Les pièces jointes sont toujours les objets MIME mais nous devons les encoder avec le module base64. Quelques points importants sur les pièces jointes:

    1. Python vous permet de joindre des fichiers texte, des images, des fichiers audio et même des applications. Vous avez juste besoin d’utiliser la classe de messagerie appropriée comme email.MIME.audio.MIMEAudio ou email.MIME.image.MIMEImage. Pour plus d’informations, reportez-vous à cette section de la documentation Python. Vous pouvez également consulter les exemples fournis par Python pour une meilleure compréhension.
    2. Rappelez-vous de la taille du fichier: envoyer des fichiers de plus de 20 Mo est une mauvaise pratique.,

    Dans les e-mails transactionnels, les fichiers PDF sont les plus fréquemment utilisés: nous recevons généralement des reçus, des billets, des cartes d’embarquement, des confirmations de commandes, etc. Examinons donc comment envoyer une carte d’embarquement sous forme de fichier PDF.

    Entrée:

    Pour joindre plusieurs fichiers, vous pouvez appeler le message.méthode attach () plusieurs fois.

    Comment envoyer un e-mail avec des images

    les Images, même si elles sont une partie du corps du message, pièces jointes ainsi., Il en existe trois types: les pièces jointes CID (intégrées en tant qu’objet MIME), les images base64 (intégrées en ligne) et les images liées. Nous avons décrit leurs particularités, avantages et inconvénients, et la compatibilité avec la plupart des clients de messagerie dans cet article.

    mettons-nous d’exemples.

    Pour ajouter une pièce jointe CID, nous allons créer un message MIME multipart avec le composant MIMEImage:

    Sortie:

    Le CID l’image est affichée à la fois comme une partie du message HTML et comme une pièce jointe., Les messages avec ce type d’image sont souvent considérés comme du spam: consultez l’onglet Analytics dans Mailtrap pour voir le taux de spam et les recommandations sur son amélioration. De nombreux clients de messagerie-Gmail en particulier-n’affichent pas d’images CID dans la plupart des cas. Voyons donc comment intégrer une image encodée en base64.

    Ici, nous allons utiliser base64 module et de l’expérience avec le même fichier image:

    Résultat:

    Maintenant, l’image est intégrée dans le code HTML du message et n’est pas disponible en fichier attaché., Python a codé notre image jpg, et si nous allons dans l’onglet Source HTML, nous verrons la longue chaîne de données d’image dans le src img.

    Comment envoyer plusieurs e-mails en Python

    Envoyer plusieurs e-mails à différents destinataires et les rendre personnels est la particularité des e-mails en Python.

    Pour ajouter plusieurs autres destinataires, vous pouvez simplement taper leurs adresses séparées par une virgule, ajouter CC et BCC. Mais si vous travaillez avec un envoi d’e-mail en vrac, Python vous économisera avec des boucles.

    l’Une des options est de créer une base de données dans un .,le format csv (nous supposons qu’il est enregistré dans le même dossier que votre script Python).

    Nous voyons souvent nos noms dans des exemples transactionnels ou même promotionnels. Voici comment nous pouvons le faire avec Python.

    Organisons la liste dans un tableau simple avec seulement deux colonnes: nom et adresse e-mail. Il devrait ressembler à l’exemple suivant:

    #name,emailJohn Johnson,[email protected] Peterson,[email protected]

    Le code ci-dessous ouvrira le fichier et bouclera ses lignes ligne par ligne, en remplaçant le {name} par la valeur de la colonne « name”.,

    Input:

    Après avoir exécuté le script, nous obtenons la réponse suivante:

    Sent to John JohnsonSent to Peter Peterson>>> 

    Output

    Dans notre boîte de réception Mailtrap, nous voyons deux messages: un pour John Johnson et un autre pour Peter Peterson, livrés simultanément:

    Envoi d’e-mails avec Python via Gmail

    Lorsque vous êtes prêt à envoyer des e-mails à de vrais destinataires, vous pouvez configurer votre serveur de production. Cela dépend également de vos besoins, objectifs et préférences: votre hôte local ou tout SMTP externe.,

    L’une des options les plus populaires est Gmail, alors regardons de plus près.

    Nous pouvons souvent voir des titres comme « Comment configurer un compte Gmail pour le développement”. En fait, cela signifie que vous allez créer un nouveau compte Gmail et l’utiliser dans un but particulier.

    Pour pouvoir envoyer des e-mails via votre compte Gmail, vous devez fournir un accès à votre application. Vous pouvez autoriser des applications moins sécurisées ou profiter du protocole d’autorisation OAuth2. C’est beaucoup plus difficile mais recommandé pour des raisons de sécurité.,

    De plus, pour utiliser un serveur Gmail, vous devez savoir:

    • le nom du serveur = smtp.gmail.com
    • port = 465 pour la connexion SSL/TLS (préféré)
    • ou port = 587 pour la connexion STARTTLS.
    • nom d’utilisateur = votre adresse e-mail Gmail
    • mot de passe = votre mot de passe.

    Si vous avez tendance à la simplicité, vous pouvez utiliser Yagmail, le Gmail / SMTP dédié. Cela rend l’envoi d’e-mails très facile., Il suffit de comparer les exemples ci-dessus avec ces plusieurs lignes de code:

    Services de messagerie transactionnels

    Gmail est gratuit et largement utilisé, mais il a encore des limites pour l’envoi d’e-mails. Si vos besoins vont bien au-delà des règles Gmail, choisissez l’une des options de services transactionnels, ou comme on les appelle également, services d’API de messagerie.

    Python est pris en charge par la grande majorité des API de messagerie de confiance, vous pouvez donc choisir en fonction de vos préférences et de votre budget.,

    Voici quelques guides sur l’envoi d’e-mails avec Python à travers la liste des services les plus populaires:

    • Amazon SES
    • Mailgun
    • Mandrill
    • Postmark
    • Sendgrid
    • SocketLabs

    Prochaines étapes avec les e-mails en Python

    Nous avons démontré que les options de base décrivez la logique et une gamme de ses capacités. Pour obtenir d’excellents résultats, nous vous recommandons de revoir la documentation Python et d’expérimenter avec votre propre code!,

    Il existe un tas de différents frameworks et bibliothèques Python, ce qui rend la création d’applications plus élégante et dédiée. En particulier, certains d’entre eux peuvent aider à améliorer votre expérience avec la création de fonctionnalités d’envoi d’e— mails:

    Les frameworks les plus populaires sont:

    1. Flask, qui offre une interface simple pour l’envoi d’e-mails-Flask Mail.
    2. Django, qui peut être une excellente option pour créer des modèles HTML. (Et voici notre tutoriel sur l’envoi d’e-mails avec Django).
    3. Zope est très pratique pour le développement de sites Web.,
    4. Marrow Mailer est un framework de distribution de courrier dédié ajoutant diverses configurations utiles.
    5. Plotly et son tableau de bord peuvent aider à envoyer des graphiques et des rapports.