• Erledigen Sie die Anwendungssicherheit auf die richtige Weise! Erkennen, schützen, überwachen, beschleunigen und mehr…
  • Das manuelle Versenden einer großen Menge E-Mails ist eine mühsame Aufgabe. Sie können die Dienste von Drittanbietern verwenden, um die E-Mails gleichzeitig in großen Mengen zu senden.

    Wie wäre es, wenn Sie Ihr eigenes benutzerdefiniertes Skript zum Senden von E-Mails erstellen?

    Ist es nicht wunderbar?

    Ja, ist es. Wir werden ein Skript in Python schreiben, um E-Mails zu senden.

    Python hat eine Bibliothek namens smtplib die zum Versenden von E-Mails verwendet wird. Die Bibliothek smtplib basiert auf der SMTP (Simple Mail Transport Protocol). SMTP wird verwendet, um E-Mails an andere zu senden.

    Richten Sie Google Mail ein

    Hier verwenden wir Gmail als E-Mail-Anbieter. Google lässt die Anmeldung von Skripts nicht zu. Außerdem müssen wir die Sicherheit unseres Gmail-Kontos ändern, damit sich Skripte bei unserem Gmail-Konto anmelden können.

    Das Ändern der Sicherheitsoption in unserem Gmail-Konto ist nicht gut, da andere dadurch sehr leicht auf das Konto zugreifen können. Es wird empfohlen, ein neues Gmail-Konto zu erstellen. Gehe zu den Einstellungen hier und schalte die Weniger sichere Apps zulassen: EIN Einstellung.

    Wenn Sie die obige Einstellung nicht aktivieren möchten, können Sie sich mit der Google API bei Ihrem Gmail-Konto anmelden. Sie finden das Skript zur Verwendung der Google APIs zur Authentifizierung hier.

    Schritte zum Senden von E-Mails

    Bestimmte Schritte müssen ausgeführt werden, um eine E-Mail mit dem zu senden smtplib Bibliothek. Sehen wir uns zuerst die Schritte an und dann schreiben wir das Skript.

    # 1. Verbindung zum SMTP-Server herstellen

    Jeder Dienstanbieter hat einen anderen SMTP-Server-Domänennamen und -Port. Wir müssen den SMTP-Server-Domänennamen und den Port des E-Mail-Anbieters verwenden, den wir im Skript verwenden werden. Der Domänenname und Port des SMTP-Servers für Gmail lauten smtp.gmail.com und <em>465</em>.

    Wir werden verwenden SSL Verschlüsselung für die SMTP-Serververbindung, da sie sicherer ist als die TSL Verschlüsselung. Wenn Sie die verwenden möchten TSL Verschlüsselung, dann den Port verwenden 587 statt 465. Der Domänenname des SMTP-Servers unterscheidet sich je nach E-Mail-Dienstanbieter.

    Der Code zum Verbinden mit dem SMTP-Server

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

    # 2. Einloggen

    Sobald die Verbindung zum SMTP-Server hergestellt ist, können wir uns mit der E-Mail-Adresse und dem Passwort mit dem login Methode des SMTP-Objekts. Der Code sieht wie folgt aus.

    server.login(sender_email, password)

    # 3. Mail senden

    Nach der Anmeldung können wir nicht warten, bis die E-Mail gesendet wird. Senden Sie die E-Mail mit sendmail die Methode. Stellen Sie sicher, dass Sie die E-Mail im folgenden Format senden.

    Betreff: your_subject_for \newline mail_content

    Leerzeichen sind nicht erforderlich. Sie dienen nur zur Verdeutlichung im obigen Format. Sehen wir uns den Beispielcode an.

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

    # 4. Verlassen

    Vergessen Sie nicht, das SMTP zu beenden c

    Wir haben die Schritte zum Senden von E-Mails mit Python gesehen. Wir haben jedoch nicht den vollständigen Code besprochen. Lassen Sie uns den Code schnell durchgehen.

    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)
    

    Wir haben eine Klasse namens . erstellt E-mail. Und es hat eine Methode namens senden um die Mails zu versenden. Schreibkurs oder einfach nicht, liegt bei Ihnen. Die Klasse macht es lesbarer. Wir haben alle oben besprochenen Schritte nacheinander im senden Methode.

    Hurra! Sie haben eine E-Mail mit Python-Skript gesendet.

    HTML-Inhalt

    Was ist, wenn Sie die E-Mail in HTML senden möchten? Ist es möglich?

    Ja, warum nicht. Wir können die E-Mail mit HTML senden, die Bibliothek heißt email.mime. Es ist eine eingebaute Bibliothek.

    Das MIME ist ein Standard, der verwendet wird, um das Format von E-Mails zu erweitern, um Anwendungsprogramme, Videos, Bilder usw. zu unterstützen.

    Es gibt zwei Klassen, die wir von der . brauchen email.mime Modul. Sie sind MIMEText und MIMEMultipart. Sehen wir uns eine kurze Erklärung zu ihnen an.

    # 1. MIME-Text

    Die MIMEText-Klasse wird verwendet, um unseren E-Mail-Inhalt in HTML zu schreiben. Wir erstellen eine Instanz der Klasse MIMEText, indem wir den HTML-Inhalt und die Art des Inhalts übergeben. Siehe den Beispielcode unten.

    html_content = MIMEText(html_template, 'html')
    

    Einige E-Mail-Dienste unterstützen kein HTML-Rendering. Daher ist es besser, zwei Instanzen der Klasse MIMEText für Klartext und HTML zu erstellen.

    # 2. MIMEMehrteilig

    Die MIMEMultipart-Klasse wird verwendet, um die Formatierung und das Schreiben von Betreff, von Adresse zu Adresse usw. zu vereinfachen. Wir geben den mit der MIMEText-Klasse erstellten Inhalt an MIMEMultipart mit dem attach Methode.

    Wir müssen sicherstellen, dass die Instanz von MIMEMultipart mit dem Argument erstellt wird alternative um Nur-Text oder HTML zu rendern. Lassen Sie uns eine E-Mail mit HTML-Inhalt senden.

    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)
    

    Sie können mit diesem Attribut auch eine Blindkopie hinzufügen Bcc in der MIMEMultipart-Instanz.

    Anhänge hinzufügen

    Anhänge können Bilder, PDFs, Dokumente, Blätter usw. sein. Es heißt MIMEBase in email.mime Klasse. Es wird verwendet, um der E-Mail Anhänge hinzuzufügen.

    Fügen wir der obigen E-Mail einen Anhang hinzu.

    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)
    

    Mailen Sie an Massen-Mails auf einmal

    Wir haben eine Schleife verwendet, um dieselbe E-Mail an mehrere Mitglieder zu senden. Das ist ein Fall (wenn Sie nicht möchten, dass die Empfänger von anderen Empfängern erfahren).

    Angenommen, Sie müssen dieselbe E-Mail senden an 1000 Mitglieder auf einmal derselben Gruppe. In solchen Fällen ist die Verwendung einer Schleife nicht angemessen. Wir können mehrere E-Mails im . hinzufügen Zu Feld in der allgemeinen Post verfassen. Wie macht man es im Python-Skript?

    Wir müssen die Liste der E-Mails als eine mit a . getrennte Zeichenfolge kombinieren Komma und Leerzeichen. Wir können die verwenden beitreten method string, um alle E-Mails als String zusammenzufassen. Sehen Sie sich den Code an, um E-Mails als String zu kombinieren.

    ", ".join(emails)

    Ersetzen Sie die Zu Feld im obigen Skript mit der obigen Zeichenfolge. Das war's, Sie haben die Mail auf einmal an Massenmails gesendet.

    Fazit

    Es gibt einige Bibliotheken von Drittanbietern, um E-Mails in Python zu senden. Einige von ihnen sind Mappen, Yagmail, Flanker, etc.. Diese Bibliotheken helfen uns, Skripte mit wenigen Codezeilen zu schreiben. Sie können sie auch erkunden.

    Jetzt können Sie Ihre E-Mail-Inhalte mit Python-Skripten automatisieren. Die Struktur von E-Mails senden wird je nach Anwendungsfall unterschiedlich sein. Wir haben verschiedene Szenarien des E-Mail-Versands gesehen. Sie können die im Tutorial besprochenen Skripte ganz einfach an Ihren Anwendungsfall anpassen. Ich habe die Referenz daraus entnommen Artikel.

    Viel Spaß beim Codieren 🙂