• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • L'envoi manuel d'un grand nombre d'e-mails est une tâche fastidieuse. Vous pouvez utiliser des services tiers pour envoyer les e-mails en masse à la fois.

    Et si vous créiez votre propre script personnalisé pour envoyer des e-mails ?

    N'est-ce pas merveilleux ?

    Ouais c'est ça. Nous allons écrire un script en Python pour envoyer des emails.

    Python a une bibliothèque appelée smtplib qui est utilisé pour envoyer des e-mails. La bibliothèque smtplib est basée sur la SMTP (Protocole de transport de courrier simple). SMTP est utilisé pour envoyer des e-mails à d'autres.

    Setup Gmail

    Ici, nous allons utiliser Gmail comme fournisseur de messagerie. Google n'autorise pas la connexion des scripts. Et nous devons modifier la sécurité de notre compte Gmail pour permettre aux scripts de se connecter à notre compte Gmail.

    Changer l'option de sécurité dans notre compte Gmail n'est pas bon car cela permet aux autres d'accéder très facilement au compte. Il est recommandé de créer un nouveau compte Gmail. Allez dans les paramètres ici et allumez le Autoriser les applications moins sécurisées : ON réglage.

    Si vous n'êtes pas à l'aise avec l'activation du paramètre ci-dessus, vous pouvez utiliser l'API Google pour vous connecter à votre compte Gmail. Vous pouvez trouver le script pour utiliser les API Google pour l'authentification ici.

    Steps to Send Mail

    Certaines étapes doivent être effectuées pour envoyer un courrier en utilisant le smtplib bibliothèque. Voyons d'abord les étapes, puis nous écrirons le script.

    # 1. Connexion au serveur SMTP

    Chaque fournisseur de services aura un nom de domaine et un port de serveur SMTP différents. Nous devons utiliser le nom de domaine du serveur SMTP et le port du fournisseur de messagerie que nous allons utiliser dans le script. Le nom de domaine et le port du serveur SMTP pour Gmail sont smtp.gmail.com et <em>465</em>.

    Nous utiliserons SSL cryptage pour la connexion au serveur SMTP car il est plus sécurisé que le TSL chiffrement. Si vous souhaitez utiliser le TSL cryptage, puis utilisez le port 587 au lieu de 465. Le nom de domaine du serveur SMTP sera différent en fonction du fournisseur de services de messagerie.

    Le code pour se connecter au serveur SMTP

    server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
    

    # 2. Se connecter

    Une fois la connexion établie avec le serveur SMTP, nous pouvons nous connecter en utilisant l'adresse e-mail et le mot de passe avec le login Méthode de l'objet SMTP. Le code ressemble à ceci.

    server.login(sender_email, password)

    # 3. Envoyer un mail

    Après la connexion, il n'y a aucun moyen d'attendre pour envoyer le courrier. Envoyez le courrier en utilisant sendmail la méthode. Assurez-vous d'envoyer le courrier dans le format suivant.

    Objet : your_subject_for \newline mail_content

    Les espaces ne sont pas nécessaires. Ils sont juste pour clarification dans le format ci-dessus. Voyons l'exemple de code.

    server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")

    # 4. quitter

    N'oubliez pas de quitter le SMTP c

    Nous avons vu les étapes pour envoyer du courrier en utilisant Python. Mais, nous n'avons pas discuté du code complet. Parcourons rapidement le code.

    import smtplib, ssl
    
    class Mail:
    
        def __init__(self):
            self.port = 465
            self.smtp_server_domain_name = "smtp.gmail.com"
            self.sender_mail = "GMAIL_ADDRESS"
            self.password = "SECURE_PASSWORD"
    
        def send(self, emails, subject, content):
            ssl_context = ssl.create_default_context()
            service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
            service.login(self.sender_mail, self.password)
            
            for email in emails:
                result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}")
    
            service.quit()
    
    
    if __name__ == '__main__':
        mails = input("Enter emails: ").split()
        subject = input("Enter subject: ")
        content = input("Enter content: ")
    
        mail = Mail()
        mail.send(mails, subject, content)
    

    Nous avons créé une classe appelée Courrier. Et il a une méthode appelée envoyer pour envoyer les mails. Cours d'écriture ou tout simplement pas, c'est à vous de décider. La classe le rend plus lisible. Nous avons mis en œuvre toutes les étapes décrites ci-dessus une par une dans le envoyer méthode.

    Hourra! vous avez envoyé un mail en utilisant le script Python.

    HTML Content

    Et si vous souhaitez envoyer le courrier en HTML ? C'est possible?

    Ouais pourquoi pas. Nous pouvons envoyer le courrier en utilisant HTML la bibliothèque appelée email.mime. C'est une bibliothèque intégrée.

    Le MIME est une norme utilisée pour étendre le format des e-mails pour prendre en charge les programmes d'application, la vidéo, les images, etc.,

    Il y a deux classes dont nous avons besoin de la email.mime module. Elles sont MIMEText et MIMEMultipart. Voyons une brève explication à leur sujet.

    # 1. Texte MIME

    La classe MIMEText est utilisée pour écrire notre contenu de courrier en HTML. Nous allons créer une instance de la classe MIMEText en passant le contenu HTML et le type de contenu. Voir l'exemple de code ci-dessous.

    html_content = MIMEText(html_template, 'html')
    

    Certains services de messagerie ne prennent pas en charge le rendu HTML. Il est donc préférable de créer deux instances de la classe MIMEText pour le texte brut et le HTML.

    # 2. MIMEMultipart

    La classe MIMEMultipart est utilisée pour simplifier le formatage et l'écriture du sujet, de l'adresse à l'adresse, etc. Nous donnerons le contenu créé avec la classe MIMEText à MIMEMultipart en utilisant le attach méthode.

    Nous devons nous assurer que l'instance de MIMEMultipart est créée avec l'argument alternative pour restituer du texte brut ou du HTML. Envoyons un mail avec du contenu HTML.

    import smtplib, ssl
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    
    class Mail:
    
        def __init__(self):
            ...
    
        def send(self, emails):
            ssl_context = ssl.create_default_context()
            service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
            service.login(self.sender_mail, self.password)
            
            for email in emails:
                mail = MIMEMultipart('alternative')
                mail['Subject'] = 'Geekflare Celebrations'
                mail['From'] = self.sender_mail
                mail['To'] = email
    
                text_template = """
                Geekflare
    
                Hi {0},
                We are delighted announce that our website hits 10 Million views this month.
                """
                html_template = """
                <h1>Geekflare</h1>
    
                <p>Hi {0},</p>
                <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p>
                """
    
                html_content = MIMEText(html_template.format(email.split("@")[0]), 'html')
                text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain')
    
                mail.attach(text_content)
                mail.attach(html_content)
    
                service.sendmail(self.sender_mail, email, mail.as_string())
    
            service.quit()
    
    
    if __name__ == '__main__':
        mails = input("Enter emails: ").split()
    
        mail = Mail()
        mail.send(mails)
    

    Vous pouvez également ajouter une copie carbone invisible en utilisant cet attribut Bcc dans l'instance MIMEMultipart.

    Adding Attachments

    Les pièces jointes peuvent être des images, des pdf, des documents, des feuilles, etc. Base MIME et email.mime classer. Il est utilisé pour ajouter des pièces jointes au courrier.

    Ajoutons une pièce jointe au courrier ci-dessus.

    import smtplib, ssl
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    from pathlib import Path
    
    
    class Mail:
    
        def __init__(self):
            ...
    
        def send(self, emails):
            ## login...
            
            for email in emails:
                ## MIMEMultipart instance
    
                ## text and html templates
    
                ## MIMEText instances
    
                ## attaching messages to MIMEMultipart
    
                ## attaching an attachment
                file_path = "Geekflare-logo.png"
                mimeBase = MIMEBase("application", "octet-stream")
                with open(file_path, "rb") as file:
                    mimeBase.set_payload(file.read())
                encoders.encode_base64(mimeBase)
                mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}")
                mail.attach(mimeBase)
    
                ## sending mail
    
            service.quit()
    
    
    if __name__ == '__main__':
        mails = input("Enter emails: ").split()
    
        mail = Mail()
        mail.send(mails)
    

    Mail to Bulk Mails at Once

    Nous avons utilisé une boucle pour envoyer le même courrier à plusieurs membres. C'est un cas (lorsque vous ne voulez pas que les récepteurs connaissent les autres récepteurs).

    Supposons que vous deviez envoyer le même courrier à 1000 membres à la fois d'un même groupe. Dans de tels cas, l'utilisation d'une boucle ne sera pas appropriée. Nous pouvons ajouter plusieurs e-mails dans le À champ dans la composition de courrier général. Comment le faire en script Python ?

    Nous devons combiner la liste des e-mails sous la forme d'une chaîne séparée par un virgule et espace. Nous pouvons utiliser le join chaîne de méthode pour combiner tous les e-mails sous forme de chaîne. Voir le code pour combiner les e-mails sous forme de chaîne.

    ", ".join(emails)

    Remplacez le À champ dans le script ci-dessus en utilisant la chaîne ci-dessus. Ça y est, vous avez envoyé le courrier aux e-mails en masse à la fois.

    Conclusion

    Il existe des bibliothèques tierces pour envoyer des e-mails en Python. Certains d'entre eux sont Enveloppes, Yagmail, Flanker, etc., Ces bibliothèques nous aident à écrire des scripts avec peu de lignes de code. Vous pouvez également les explorer.

    Maintenant, vous pouvez automatiser vos e-mails à l'aide de scripts Python. La structure de envoyer des emails sera différent en fonction de votre cas d'utilisation. Nous avons vu différents scénarios d'envoi d'e-mails. Vous pouvez facilement personnaliser les scripts abordés dans le didacticiel en fonction de votre cas d'utilisation. j'en ai pris la référence article.

    Codage heureux 🙂