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

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

Λοιπόν, εδώ είναι ένα σενάριο: Έχετε τα ονόματα και τις διευθύνσεις email μιας δέσμης επαφών. Και θέλετε να στείλετε ένα μήνυμα σε κάθε μία από αυτές τις επαφές, προσθέτοντας ταυτόχρονα ένα "Αγαπητό [όνομα]" στην κορυφή του μηνύματος.

Για λόγους απλότητας μπορείτε να αποθηκεύσετε τα στοιχεία επικοινωνίας σε ένα αρχείο και όχι σε μια βάση δεδομένων. Μπορείτε επίσης να αποθηκεύσετε το πρότυπο του μηνύματος που θέλετε να στείλετε σε ένα αρχείο.

Η ενότητα smtplib του Python είναι βασικά το μόνο που χρειάζεστε για να στείλετε απλά email, χωρίς καμία γραμμή θέματος ή τέτοιες πρόσθετες πληροφορίες. Αλλά για πραγματικά μηνύματα ηλεκτρονικού ταχυδρομείου, χρειάζεστε μια γραμμή θέματος και πολλές πληροφορίες - ίσως ακόμη και εικόνες και συνημμένα.

Εδώ μπαίνει το πακέτο email της Python. Λάβετε υπόψη ότι δεν είναι δυνατόν να στείλετε ένα μήνυμα email χρησιμοποιώντας emailμόνο το πακέτο. Χρειάζεστε έναν συνδυασμό και των δύο emailκαι smtplib.

Φροντίστε να δείτε την ολοκληρωμένη επίσημη τεκμηρίωση και για τα δύο.

Ακολουθούν τέσσερα βασικά βήματα για την αποστολή email μέσω Python:

  1. Ρυθμίστε το διακομιστή SMTP και συνδεθείτε στο λογαριασμό σας.
  2. Δημιουργήστε το MIMEMultipartαντικείμενο μήνυμα και να το φορτώσετε με τις κατάλληλες κεφαλίδες για From, Toκαι Subjectπεδία.
  3. Προσθέστε το σώμα του μηνύματός σας.
  4. Στείλτε το μήνυμα χρησιμοποιώντας το αντικείμενο διακομιστή SMTP.

Τώρα επιτρέψτε μου να σας καθοδηγήσω σε όλη τη διαδικασία.

Ας υποθέσουμε ότι έχετε ένα αρχείο επαφών mycontacts.txtως εξής:

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

Κάθε γραμμή αντιπροσωπεύει μία μόνο επαφή. Έχουμε το όνομα ακολουθούμενο από τη διεύθυνση email. Αποθηκεύω τα πάντα με πεζά. Θα το αφήσω στη λογική προγραμματισμού για να μετατρέψω οποιαδήποτε πεδία σε κεφαλαία ή πεζά, εάν είναι απαραίτητο. Όλα αυτά είναι πολύ εύκολα στο Python.

Στη συνέχεια, έχουμε το αρχείο προτύπου μηνυμάτων message.txt.

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

Παρατηρήστε τη λέξη " ${PERSON_NAME}"; Αυτή είναι μια συμβολοσειρά προτύπου στο Python. Οι χορδές προτύπων μπορούν εύκολα να αντικατασταθούν με άλλες χορδές. σε αυτό το παράδειγμα, ${PERSON_NAME}πρόκειται να αντικατασταθεί με το πραγματικό όνομα του ατόμου, όπως θα δείτε σύντομα.

Τώρα ας ξεκινήσουμε με τον κώδικα Python. Πρώτον, πρέπει να διαβάσουμε τις επαφές από το mycontacts.txtαρχείο. Θα μπορούσαμε επίσης να γενικεύσουμε αυτό το κομμάτι στη δική του λειτουργία.

Η συνάρτηση get_contacts()παίρνει ένα όνομα αρχείου ως όρισμα. Θα ανοίξει το αρχείο, θα διαβάσει κάθε γραμμή (δηλ. Κάθε επαφή), θα το χωρίσει σε όνομα και email, και στη συνέχεια να τα προσθέσει σε δύο ξεχωριστές λίστες. Τέλος, οι δύο λίστες επιστρέφονται από τη συνάρτηση.

Χρειαζόμαστε επίσης μια συνάρτηση για την ανάγνωση σε ένα αρχείο προτύπου (όπως message.txt) και την επιστροφή ενός Templateαντικειμένου από το περιεχόμενό του.

Όπως και η προηγούμενη συνάρτηση, αυτό παίρνει ένα όνομα αρχείου ως επιχείρημά του.

Για να στείλετε το email, πρέπει να χρησιμοποιήσετε το SMTP (Simple Mail Transfer Protocol). Όπως αναφέρθηκε προηγουμένως, η Python παρέχει βιβλιοθήκες για τη διαχείριση αυτής της εργασίας.

Στο παραπάνω απόσπασμα κώδικα, εισάγετε smtplibκαι δημιουργείτε μια παρουσία SMTP που ενσωματώνει μια σύνδεση SMTP. Παίρνει ως παράμετρο τη διεύθυνση κεντρικού υπολογιστή και έναν αριθμό θύρας, οι οποίες εξαρτώνται εξ ολοκλήρου από τις ρυθμίσεις SMPT του συγκεκριμένου παρόχου υπηρεσιών email Για παράδειγμα, στην περίπτωση του Outlook, η γραμμή 4 παραπάνω θα ήταν αντ 'αυτού:

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

Θα πρέπει να χρησιμοποιήσετε τη διεύθυνση κεντρικού υπολογιστή και τον αριθμό θύρας του συγκεκριμένου παρόχου υπηρεσιών email για να λειτουργήσει όλο το θέμα.

MY_ADDRESSκαι PASSWORDπαραπάνω είναι δύο μεταβλητές που περιέχουν την πλήρη διεύθυνση ηλεκτρονικού ταχυδρομείου και τον κωδικό πρόσβασης του λογαριασμού που πρόκειται να χρησιμοποιήσετε.

Τώρα θα ήταν η κατάλληλη στιγμή για να ανακτήσετε τα στοιχεία επικοινωνίας και τα πρότυπα μηνυμάτων χρησιμοποιώντας τις συναρτήσεις που ορίσαμε παραπάνω.

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

Τώρα, για καθεμία από αυτές τις επαφές, ας στείλουμε το μήνυμα ξεχωριστά.

Για κάθε nameκαι email(από το αρχείο επαφές), θέλετε να δημιουργήσετε ένα αντικείμενο MIMEMultipart, για τη σύσταση της From, To, Subjectκεφαλίδες τύπου περιεχομένου, όπως ένα λεξικό λέξη-κλειδί, και στη συνέχεια, συνδέοντας το σώμα του μηνύματος στο MIMEMultipartαντικείμενο ως απλό κείμενο. Ίσως θέλετε να διαβάσετε την τεκμηρίωση για να μάθετε περισσότερα σχετικά με άλλους τύπους MIME με τους οποίους μπορείτε να πειραματιστείτε.

Σημειώστε επίσης ότι στη γραμμή 10 παραπάνω, αντικαθιστώ ${PERSON_NAME}με το πραγματικό όνομα που εξήχθη από το αρχείο επαφών χρησιμοποιώντας τον μηχανισμό templating στο Python.

Σε αυτό το συγκεκριμένο παράδειγμα διαγράφω το MIMEMultipartαντικείμενο και το δημιουργώ ξανά κάθε φορά που πραγματοποιείτε επαναλήψεις.

Μόλις γίνει αυτό, μπορείτε να στείλετε το μήνυμα χρησιμοποιώντας τη πρακτική λειτουργία send_message () του αντικειμένου SMTP που δημιουργήσατε νωρίτερα.

Εδώ είναι ο πλήρης κωδικός:

Ορίστε! Πιστεύω ότι ο κώδικας είναι τώρα αρκετά σαφής.

Μη διστάσετε να το αντιγράψετε και να το τροποποιήσετε, όπως απαιτείται.

Εκτός από τα επίσημα έγγραφα Python, θα ήθελα επίσης να αναφέρω αυτόν τον πόρο που με βοήθησε πολύ.

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

Αρχικά δημοσίευσα αυτό το άρθρο εδώ. Αν σας άρεσε αυτό το άρθρο, χτυπήστε τη μικρή καρδιά παρακάτω. Ευχαριστώ!