Πώς να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου μέσω του Gmail στην Python;

Η μη αυτόματη αποστολή μεγάλου όγκου email είναι μια κουραστική εργασία. Μπορείτε να χρησιμοποιήσετε υπηρεσίες τρίτων για να στέλνετε τα email μαζικά κάθε φορά.

Τι θα λέγατε να δημιουργήσετε το δικό σας προσαρμοσμένο σενάριο για την αποστολή email;

Δεν είναι υπέροχο;

Ναι είναι. Θα γράψουμε ένα σενάριο στην Python για να στείλουμε email.

Η Python έχει μια βιβλιοθήκη που ονομάζεται smtplib η οποία χρησιμοποιείται για την αποστολή email. Η βιβλιοθήκη smtplib βασίζεται στο SMTP (Simple Mail Transport Protocol). Το SMTP χρησιμοποιείται για την αποστολή email σε άλλους.

Ρύθμιση του Gmail

Εδώ, θα χρησιμοποιήσουμε το Gmail ως πάροχο email. Η Google δεν επιτρέπει τη σύνδεση σεναρίων. Και πρέπει να κάνουμε μια αλλαγή στην ασφάλεια του λογαριασμού μας στο Gmail που επιτρέπει στα σενάρια να συνδέονται στον λογαριασμό μας στο Gmail.

Η αλλαγή της επιλογής ασφαλείας στον λογαριασμό μας στο Gmail δεν είναι καλή, καθώς επιτρέπει σε άλλους να έχουν πρόσβαση στον λογαριασμό πολύ εύκολα. Συνιστάται να δημιουργήσετε έναν νέο λογαριασμό Gmail. Μεταβείτε στις ρυθμίσεις εδώ και ενεργοποιήστε τη ρύθμιση Επιτρέπονται λιγότερο ασφαλείς εφαρμογές: ON.

Εάν δεν αισθάνεστε άνετα με την ενεργοποίηση της παραπάνω ρύθμισης, μπορείτε να χρησιμοποιήσετε το Google API για να συνδεθείτε στον λογαριασμό σας στο Gmail. Μπορείτε να βρείτε το σενάριο για να χρησιμοποιήσετε τα API της Google για έλεγχο ταυτότητας εδώ.

Βήματα για την αποστολή αλληλογραφίας

Πρέπει να γίνουν ορισμένα βήματα για να στείλετε ένα email χρησιμοποιώντας τη βιβλιοθήκη smtplib. Ας δούμε πρώτα τα βήματα και μετά θα γράψουμε το σενάριο.

#1. Σύνδεση στον διακομιστή SMTP

Κάθε πάροχος υπηρεσιών θα έχει διαφορετικό όνομα τομέα και θύρα διακομιστή SMTP. Πρέπει να χρησιμοποιήσουμε το όνομα τομέα διακομιστή SMTP και τη θύρα του παρόχου email που πρόκειται να χρησιμοποιήσουμε στο σενάριο. Το όνομα τομέα και η θύρα του διακομιστή SMTP για το Gmail είναι smtp.gmail.com και 465.

Θα χρησιμοποιήσουμε κρυπτογράφηση SSL για τη σύνδεση διακομιστή SMTP, καθώς είναι πιο ασφαλής από την κρυπτογράφηση TSL. Εάν θέλετε να χρησιμοποιήσετε την κρυπτογράφηση TSL, χρησιμοποιήστε τη θύρα 587 αντί για 465. Το όνομα τομέα διακομιστή SMTP θα είναι διαφορετικό με βάση τον πάροχο υπηρεσιών email.

  Διορθώστε το Error Code Beaver στο Destiny

Ο κωδικός για σύνδεση στον διακομιστή SMTP

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

#2. Σύνδεση

Μόλις δημιουργηθεί η σύνδεση με τον διακομιστή SMTP, μπορούμε να συνδεθούμε χρησιμοποιώντας τη διεύθυνση email και τον κωδικό πρόσβασης με τη μέθοδο του αντικειμένου σύνδεσης SMTP. Ο κώδικας φαίνεται ως εξής.

server.login(sender_email, password)

#3. Αποστολή αλληλογραφίας

Μετά τη σύνδεση, δεν υπάρχει περίπτωση να περιμένουμε να στείλουμε το μήνυμα. Στείλτε το μήνυμα χρησιμοποιώντας τη μέθοδο sendmail. Βεβαιωθείτε ότι στέλνετε το μήνυμα στην ακόλουθη μορφή.

Θέμα: your_subject_for newline mail_content

Οι χώροι δεν είναι απαραίτητοι. Είναι απλώς για διευκρίνιση στην παραπάνω μορφή. Ας δούμε το δείγμα κώδικα.

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

#4. Εγκαταλείπω

Μην ξεχάσετε να κλείσετε το SMTP c

Έχουμε δει τα βήματα για την αποστολή αλληλογραφίας χρησιμοποιώντας Python. Όμως, δεν έχουμε συζητήσει τον πλήρη κώδικα. Ας περάσουμε γρήγορα από τον κώδικα.

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)

Έχουμε δημιουργήσει μια κλάση που ονομάζεται Mail. Και έχει μια μέθοδο που ονομάζεται αποστολή για την αποστολή των μηνυμάτων. Το μάθημα γραφής ή απλώς όχι εξαρτάται από εσάς. Η τάξη το κάνει πιο ευανάγνωστο. Έχουμε εφαρμόσει όλα τα βήματα που συζητήθηκαν παραπάνω ένα προς ένα στη μέθοδο αποστολής.

Ούρα! έχετε στείλει ένα μήνυμα χρησιμοποιώντας σενάριο Python.

Περιεχόμενο HTML

Τι γίνεται αν θέλετε να στείλετε το μήνυμα σε HTML; Είναι δυνατόν?

  7 κορυφαία διαδικτυακά μαθήματα για να συνεχίσετε την ανάλυση δεδομένων αθλητικών

Ναι, γιατί οχι. Μπορούμε να στείλουμε την αλληλογραφία χρησιμοποιώντας HTML τη βιβλιοθήκη που ονομάζεται email.mime. Είναι μια ενσωματωμένη βιβλιοθήκη.

ο ΜΙΜΟΣ είναι ένα πρότυπο που χρησιμοποιείται για την επέκταση της μορφής των email για την υποστήριξη προγραμμάτων εφαρμογών, βίντεο, εικόνων κ.λπ.,

Υπάρχουν δύο κατηγορίες που χρειαζόμαστε από τη μονάδα email.mime. Είναι το MIMEText και το MIMEMMultipart. Ας δούμε μια σύντομη εξήγηση για αυτά.

#1. Κείμενο MIMET

Η κλάση MIMEText χρησιμοποιείται για την εγγραφή του περιεχομένου αλληλογραφίας μας σε HTML. Θα δημιουργήσουμε ένα στιγμιότυπο της κλάσης MIMEText περνώντας περιεχόμενο HTML και τον τύπο περιεχομένου. Δείτε το δείγμα κώδικα παρακάτω.

html_content = MIMEText(html_template, 'html')

Ορισμένες υπηρεσίες αλληλογραφίας δεν υποστηρίζουν απόδοση HTML. Επομένως, είναι καλύτερο να δημιουργήσετε δύο παρουσίες της κλάσης MIMEText για απλό κείμενο και HTML.

#2. MIMEΠολυμερές

Η κλάση MIMEMultipart χρησιμοποιείται για την απλοποίηση του θέματος μορφοποίησης και γραφής, από διεύθυνση, σε διεύθυνση κ.λπ. Θα δώσουμε το περιεχόμενο που δημιουργήθηκε με την κλάση MIMEText στο MIMEMultipart χρησιμοποιώντας τη μέθοδο επισύναψης.

Πρέπει να βεβαιωθούμε ότι η παρουσία του MIMEMultipart δημιουργείται με το όρισμα εναλλακτικό για απόδοση απλού κειμένου ή HTML. Ας στείλουμε ένα μήνυμα με περιεχόμενο 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'] = 'grtechpc.org Celebrations'
            mail['From'] = self.sender_mail
            mail['To'] = email

            text_template = """
            grtechpc.org

            Hi {0},
            We are delighted announce that our website hits 10 Million views this month.
            """
            html_template = """
            <h1>grtechpc.org</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)

Μπορείτε επίσης να προσθέσετε τυφλό αντίγραφο άνθρακα χρησιμοποιώντας αυτό το χαρακτηριστικό Bcc στην παρουσία MIMEMmultipart.

Προσθήκη συνημμένων

Τα συνημμένα μπορεί να είναι εικόνες, pdf, έγγραφα, φύλλα κ.λπ. Στην κλάση email.mime ονομάζεται MIMEBase. Χρησιμοποιείται για την προσθήκη συνημμένων στην αλληλογραφία.

  Διορθώστε το Unity Web Player που δεν λειτουργεί

Ας προσθέσουμε ένα συνημμένο στο παραπάνω mail.

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 = "grtechpc.org-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)

Αποστολή σε μαζική αλληλογραφία ταυτόχρονα

Χρησιμοποιήσαμε έναν βρόχο για να στείλουμε το ίδιο μήνυμα σε πολλά μέλη. Αυτή είναι μια περίπτωση (όταν δεν θέλετε οι δέκτες να γνωρίζουν για άλλους δέκτες).

Ας υποθέσουμε ότι πρέπει να στείλετε το ίδιο μήνυμα σε 1000 μέλη ταυτόχρονα της ίδιας ομάδας. Σε τέτοιες περιπτώσεις, η χρήση βρόχου δεν θα είναι κατάλληλη. Μπορούμε να προσθέσουμε πολλά email στο πεδίο Προς στη γενική σύνθεση αλληλογραφίας. Πώς να το κάνω σε σενάριο Python;

Πρέπει να συνδυάσουμε τη λίστα των email ως συμβολοσειρά που χωρίζεται με κόμμα και διάστημα. Μπορούμε να χρησιμοποιήσουμε τη συμβολοσειρά της μεθόδου join για να συνδυάσουμε όλα τα email ως συμβολοσειρά. Δείτε τον κώδικα για να συνδυάσετε τα μηνύματα ηλεκτρονικού ταχυδρομείου ως συμβολοσειρά.

", ".join(emails)

Αντικαταστήστε το πεδίο Προς στην παραπάνω δέσμη ενεργειών χρησιμοποιώντας την παραπάνω συμβολοσειρά. Αυτό είναι όλο, έχετε στείλει το mail σε μαζικά μηνύματα αμέσως.

συμπέρασμα

Υπάρχουν κάποιες βιβλιοθήκες τρίτων για αποστολή email στην Python. Κάποιοι από αυτούς είναι Φάκελοι, Yagmail, Υπερφαλαγγίζων, κλπ., Αυτές οι βιβλιοθήκες μας βοηθούν να γράφουμε σενάρια με λίγες γραμμές κώδικα. Μπορείτε επίσης να τα εξερευνήσετε.

Τώρα, μπορείτε να αυτοματοποιήσετε τα email σας χρησιμοποιώντας σενάρια Python. Η δομή της αποστολής email θα είναι διαφορετική ανάλογα με την περίπτωση χρήσης σας. Έχουμε δει διαφορετικά σενάρια αποστολής email. Μπορείτε εύκολα να προσαρμόσετε τα σενάρια που αναφέρονται στο σεμινάριο στην περίπτωση χρήσης σας. Έχω πάρει την αναφορά από αυτό άρθρο.

Καλή Κωδικοποίηση 🙂